南京理工大学数字图像处理实验报告.docx
《南京理工大学数字图像处理实验报告.docx》由会员分享,可在线阅读,更多相关《南京理工大学数字图像处理实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
南京理工大学数字图像处理实验报告
数字图像处理
实验报告
课程:
******
姓名:
学号:
实验一直方图线性变换及直方图均衡化
一、实验目的
通过了解直方图的绘制、线性变换和均衡化的基本原理与实现方法,熟悉在计算机上进行直方图均衡化、线性变换的方法,来掌握简单的直方图均衡化和线性变换程序设计编写。
二、实验内容
编写直方图的显示、均衡化及线性变换的C++语言程序,同时显示线性变换后的直方图。
三、实验步骤
1、新建MFC工程;
2、分析程序流程;
3、编写程序;
4、运行调试;
5、显示结果;
6、分析结果。
四、实验原理及实现方案
(1)线性变换
原理:
线性变换是灰度变换的一种,就是将一个灰度区间映射到另一个灰度区间的变换。
线性增强变换可使图像动态范围加大,图像对比度扩展,图像清晰,特征明显,是图像增强的重要手段。
此次实验采取的灰度变换公式是分段函数,如下图所示,
g(i,j)
255
130160255f(i,j)
部分程序代码如下(详细见源文件):
for(i=1;i{for(j=0;j{intpos=width*i+j;BYTEc=pData[pos];pDC->SetPixel(j,260+height-i,RGB(c,c,c));if(c<30){pDC->SetPixel(j,height-i,RGB(0,0,0));}elseif(c>160){pDC->SetPixel(j,height-i,RGB(255,255,255));}else{BYTEc2=BYTE(1.0*255/130*(c-30));pDC->SetPixel(j,height-i,RGB(c2,c2,c2));}count[int(c)]++;}}通过对不同区域的灰度值进行不同的线性变换,从而达到预期目的。(2)直方图均衡化原理:直方图均衡化主要用于修正那些灰度范围小,灰度集中的图像,通过修正使灰度拉开,灰度变丰富,从而起到增强图像视觉效果的作用。实现方案:根据书本上所介绍的方法计算变换函数Sk和对应每个Sk的Nsk,,最后求得每个灰度级均衡化后所得的概率。再根据所得的概率画出均衡化后的直方图,比较与均衡化前的直方图的区别,分析两者的差别。算法实验步骤:步骤1:原图像素点个数步骤2:原图分布概率步骤3:原图累计概率步骤4:对累计概率四舍五入步骤5:绘制直方图部分程序代码如下(详细见源文件):intss[257];for(i=0;i<257;i++){ss[i]=0;}intpos=width*i+j;for(i=0;i<256;i++){count[i]=count[i]*10000/pos;ss[i+1]=ss[i]+count[i];}for(i=1;i<256;i++){for(intii=0;ii<256;ii++){if((ii*10000/256)>ss[i+1]){p[i+1]=ii;break;}}if(p[i+1]!=p[i]){kk++;pp[kk]=i;}}for(i=1;i<=kk;i++){pDC->MoveTo(500+2*i,600);pDC->LineTo(500+2*i,600-(ss[pp[i]]-ss[pp[i-1]]));}五、实验结果1、线性变换原图线性变换后2、直方图均衡化均衡化后均衡化前直方图均衡化后直方图程序显示结果 实验二图像增强(任选两模块)模块一图像锐化一、实验目的掌握图像锐化的基本原理,掌握拉普拉斯算子锐化的方法,熟悉计算机上进行图像锐化的方法。二、实验内容编写简单锐化及拉普拉斯算子锐化的C++MFC程序,根据所显示的图像,和原图比较,分析锐化后的效果。三、实验步骤1、新建MFC工程;2、分析程序流程;3、编写程序;4、运行调试;5、显示结果;6、分析结果。四、实验原理及实现方案原理:拉普拉斯算子是与一个边缘方向无关的边缘点检测算子。它对孤立像素的响应要比对边缘或线的响应更强烈,因此使用该算子进行图像锐化之前需要对图像作平滑处理。拉普拉斯算子是一种二阶微分算子一个连续的二元函数f(x,y),其拉普拉斯运算定义为对于数字图像,拉普拉斯算子可以简化为g(i,j)=8f(i,j)-f(i+1,j)-f(i-1,j)-f(i,j+1)-f(i,j-1)上面的表达式可以表示为卷积的形式。即表达式中的i,j=0,1,2….N-1;k=1。,i=1,H(r,s)取样如下式子部分程序代码如下(详细见源文件): 五、实验结果采用拉普拉斯增强算子锐化后模块二均值滤波一、实验目的掌握均值滤波的基本原理,掌握计算邻域均值的方法,熟悉计算机上进行均值滤波的方法。二、实验内容编写均值滤波及图像平滑化的C++MFC程序,根据所显示的图像,和原图比较,分析均值滤波图像平滑化后的效果。三、实验步骤1、新建MFC工程;2、分析程序流程;3、编写程序;4、运行调试;5、显示结果;6、分析结果。四、实验原理及实现方案原理:最简单的局部平均法称为非加权邻域平均,它均等地对待邻域中的每个像素,即各个像素灰度值的平均值作为中心像素的输出值。设有一副图像用均匀滤波所得的图像为g(x,y),则,M表示集合s里像素的总数。部分程序如下(详细见源文件):五、实验结果均值滤波处理后 实验三:自动阈值迭代法及Otsu法方法一自动阈值迭代法一、实验原理开始时选择一个阈值作为初始估计值,然后按照某种策略不断地改进这一估计值,直到满足给定的准则为止二、实验算法(1)估计一个阈值T(比如均值)(2)用阈值T将灰度直方图分割成两个区域R1和R2(3)分别计算两个区域R1和R2内的灰度平均值u1和u2;(4)选择新阈值T=(u1+u2)/2;(5)重复上述工作3-5次,直到前后两次的阈值不变三、实验步骤1、新建MFC工程;2、分析程序流程;3、编写程序;4、运行调试;5、显示结果;6、分析结果。部分程序如下(详细见源文件):for(inti=0;ifor(intj=0;j{c=dib.pData[i*height+j];sum+=c;}Ta=sum/N;Tb=Ta;//新阈值Tb,最佳阈值为Tcif(Tb!=Tc){Tc=Tb;intsuma=0,sumsa=0;intsumb=0,sumsb=0;for(intp=0;pfor(intq=0;q{c=dib.pData[p*width+q];if(c{suma+=c;sumsa++;}else{sumb+=c;sumsb++;}}ua=(float)suma/(float)sumsa;ub=(float)sumb/(float)sumsb;Tb=(int)(ua+ub)/2;}//比较for(intm=0;mfor(intn=0;n{c=dib.pData[m*width+n];if(c>Tb)dib.pData[m*width+n]=255;elsedib.pData[m*width+n]=0;}dib.DrawByPixel(pDC);四、实验结果迭代法方法二Otsu法一、实验原理大津法:对图像Image,记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。图像的总平均灰度为:u=w0*u0+w1*u1。从最小灰度值到最大灰度值遍历t,当t使得值g=w0*(u0-u)2+w1*(u1-u)2最大时t即为分割的最佳阈值。对大津法可作如下理解:该式实际上就是类间方差值,阈值t分割出的前景和背景两部分构成了整幅图像,而前景取值u0,概率为w0,背景取值u1,概率为w1,总均值为u,根据方差的定义即得该式。因方差是灰度分布均匀性的一种度量,方差值越大,说明构成图像的两部分差别越大,当部分目标错分为背景或部分背景错分为目标都导致两部分差别变小,因此使类间方差最大的分割意味着错分概率最小。二、实验算法自动阈值(Otsu法)步骤(1)计算直方图(2)设置初值:w(0)以及u(0)(3)从1到最大值设置阈值T。更新w(t)以及u(t)。计算σb(t)*σb(t)。(4)选取最大σb(t)*σb(t)对应的T三、实验步骤1、新建MFC工程;2、分析程序流程;3、编写程序;4、运行调试;5、显示结果;6、分析结果。部分程序如下(详细见源文件):for(intT=1;T<256;T++)//从1到255设置阈值T,U为平均灰度,W为平均概率{intsuma=0,sumsa=0;intsumb=0,sumsb=0;for(intd=0;dfor(inte=0;e{c=dib.pData[d*width+e];if(c{suma+=c;sumsa++;}else{sumb+=c;sumsb++;}}ua=(float)suma/(float)sumsa;wa=(float)sumwa/(float)N;ub=(float)sumb/(float)sumsb;wb=(float)sumwb/(float)N;//求的最大化类间方差D=wa*wb*(ua-ub)*(ua-ub);if(D>Dmax){Dmax=D;Tmax=T;}}for(intf=0;ffor(intg=0;g{c=dib.pData[f*width+g];//灰度阀值化if(cdib.pData[f*width+g]=0;elsedib.pData[f*width+g]=255;}dib.DrawByPixel(pDC); 四、实验结果Otsu法
{
for(j=0;j{intpos=width*i+j;BYTEc=pData[pos];pDC->SetPixel(j,260+height-i,RGB(c,c,c));if(c<30){pDC->SetPixel(j,height-i,RGB(0,0,0));}elseif(c>160){pDC->SetPixel(j,height-i,RGB(255,255,255));}else{BYTEc2=BYTE(1.0*255/130*(c-30));pDC->SetPixel(j,height-i,RGB(c2,c2,c2));}count[int(c)]++;}}通过对不同区域的灰度值进行不同的线性变换,从而达到预期目的。(2)直方图均衡化原理:直方图均衡化主要用于修正那些灰度范围小,灰度集中的图像,通过修正使灰度拉开,灰度变丰富,从而起到增强图像视觉效果的作用。实现方案:根据书本上所介绍的方法计算变换函数Sk和对应每个Sk的Nsk,,最后求得每个灰度级均衡化后所得的概率。再根据所得的概率画出均衡化后的直方图,比较与均衡化前的直方图的区别,分析两者的差别。算法实验步骤:步骤1:原图像素点个数步骤2:原图分布概率步骤3:原图累计概率步骤4:对累计概率四舍五入步骤5:绘制直方图部分程序代码如下(详细见源文件):intss[257];for(i=0;i<257;i++){ss[i]=0;}intpos=width*i+j;for(i=0;i<256;i++){count[i]=count[i]*10000/pos;ss[i+1]=ss[i]+count[i];}for(i=1;i<256;i++){for(intii=0;ii<256;ii++){if((ii*10000/256)>ss[i+1]){p[i+1]=ii;break;}}if(p[i+1]!=p[i]){kk++;pp[kk]=i;}}for(i=1;i<=kk;i++){pDC->MoveTo(500+2*i,600);pDC->LineTo(500+2*i,600-(ss[pp[i]]-ss[pp[i-1]]));}五、实验结果1、线性变换原图线性变换后2、直方图均衡化均衡化后均衡化前直方图均衡化后直方图程序显示结果 实验二图像增强(任选两模块)模块一图像锐化一、实验目的掌握图像锐化的基本原理,掌握拉普拉斯算子锐化的方法,熟悉计算机上进行图像锐化的方法。二、实验内容编写简单锐化及拉普拉斯算子锐化的C++MFC程序,根据所显示的图像,和原图比较,分析锐化后的效果。三、实验步骤1、新建MFC工程;2、分析程序流程;3、编写程序;4、运行调试;5、显示结果;6、分析结果。四、实验原理及实现方案原理:拉普拉斯算子是与一个边缘方向无关的边缘点检测算子。它对孤立像素的响应要比对边缘或线的响应更强烈,因此使用该算子进行图像锐化之前需要对图像作平滑处理。拉普拉斯算子是一种二阶微分算子一个连续的二元函数f(x,y),其拉普拉斯运算定义为对于数字图像,拉普拉斯算子可以简化为g(i,j)=8f(i,j)-f(i+1,j)-f(i-1,j)-f(i,j+1)-f(i,j-1)上面的表达式可以表示为卷积的形式。即表达式中的i,j=0,1,2….N-1;k=1。,i=1,H(r,s)取样如下式子部分程序代码如下(详细见源文件): 五、实验结果采用拉普拉斯增强算子锐化后模块二均值滤波一、实验目的掌握均值滤波的基本原理,掌握计算邻域均值的方法,熟悉计算机上进行均值滤波的方法。二、实验内容编写均值滤波及图像平滑化的C++MFC程序,根据所显示的图像,和原图比较,分析均值滤波图像平滑化后的效果。三、实验步骤1、新建MFC工程;2、分析程序流程;3、编写程序;4、运行调试;5、显示结果;6、分析结果。四、实验原理及实现方案原理:最简单的局部平均法称为非加权邻域平均,它均等地对待邻域中的每个像素,即各个像素灰度值的平均值作为中心像素的输出值。设有一副图像用均匀滤波所得的图像为g(x,y),则,M表示集合s里像素的总数。部分程序如下(详细见源文件):五、实验结果均值滤波处理后 实验三:自动阈值迭代法及Otsu法方法一自动阈值迭代法一、实验原理开始时选择一个阈值作为初始估计值,然后按照某种策略不断地改进这一估计值,直到满足给定的准则为止二、实验算法(1)估计一个阈值T(比如均值)(2)用阈值T将灰度直方图分割成两个区域R1和R2(3)分别计算两个区域R1和R2内的灰度平均值u1和u2;(4)选择新阈值T=(u1+u2)/2;(5)重复上述工作3-5次,直到前后两次的阈值不变三、实验步骤1、新建MFC工程;2、分析程序流程;3、编写程序;4、运行调试;5、显示结果;6、分析结果。部分程序如下(详细见源文件):for(inti=0;ifor(intj=0;j{c=dib.pData[i*height+j];sum+=c;}Ta=sum/N;Tb=Ta;//新阈值Tb,最佳阈值为Tcif(Tb!=Tc){Tc=Tb;intsuma=0,sumsa=0;intsumb=0,sumsb=0;for(intp=0;pfor(intq=0;q{c=dib.pData[p*width+q];if(c{suma+=c;sumsa++;}else{sumb+=c;sumsb++;}}ua=(float)suma/(float)sumsa;ub=(float)sumb/(float)sumsb;Tb=(int)(ua+ub)/2;}//比较for(intm=0;mfor(intn=0;n{c=dib.pData[m*width+n];if(c>Tb)dib.pData[m*width+n]=255;elsedib.pData[m*width+n]=0;}dib.DrawByPixel(pDC);四、实验结果迭代法方法二Otsu法一、实验原理大津法:对图像Image,记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。图像的总平均灰度为:u=w0*u0+w1*u1。从最小灰度值到最大灰度值遍历t,当t使得值g=w0*(u0-u)2+w1*(u1-u)2最大时t即为分割的最佳阈值。对大津法可作如下理解:该式实际上就是类间方差值,阈值t分割出的前景和背景两部分构成了整幅图像,而前景取值u0,概率为w0,背景取值u1,概率为w1,总均值为u,根据方差的定义即得该式。因方差是灰度分布均匀性的一种度量,方差值越大,说明构成图像的两部分差别越大,当部分目标错分为背景或部分背景错分为目标都导致两部分差别变小,因此使类间方差最大的分割意味着错分概率最小。二、实验算法自动阈值(Otsu法)步骤(1)计算直方图(2)设置初值:w(0)以及u(0)(3)从1到最大值设置阈值T。更新w(t)以及u(t)。计算σb(t)*σb(t)。(4)选取最大σb(t)*σb(t)对应的T三、实验步骤1、新建MFC工程;2、分析程序流程;3、编写程序;4、运行调试;5、显示结果;6、分析结果。部分程序如下(详细见源文件):for(intT=1;T<256;T++)//从1到255设置阈值T,U为平均灰度,W为平均概率{intsuma=0,sumsa=0;intsumb=0,sumsb=0;for(intd=0;dfor(inte=0;e{c=dib.pData[d*width+e];if(c{suma+=c;sumsa++;}else{sumb+=c;sumsb++;}}ua=(float)suma/(float)sumsa;wa=(float)sumwa/(float)N;ub=(float)sumb/(float)sumsb;wb=(float)sumwb/(float)N;//求的最大化类间方差D=wa*wb*(ua-ub)*(ua-ub);if(D>Dmax){Dmax=D;Tmax=T;}}for(intf=0;ffor(intg=0;g{c=dib.pData[f*width+g];//灰度阀值化if(cdib.pData[f*width+g]=0;elsedib.pData[f*width+g]=255;}dib.DrawByPixel(pDC); 四、实验结果Otsu法
intpos=width*i+j;
BYTEc=pData[pos];
pDC->SetPixel(j,260+height-i,RGB(c,c,c));
if(c<30){
pDC->SetPixel(j,height-i,RGB(0,0,0));}
elseif(c>160){
pDC->SetPixel(j,height-i,RGB(255,255,255));}
else{
BYTEc2=BYTE(1.0*255/130*(c-30));
pDC->SetPixel(j,height-i,RGB(c2,c2,c2));
}
count[int(c)]++;
通过对不同区域的灰度值进行不同的线性变换,从而达到预期目的。
(2)直方图均衡化
直方图均衡化主要用于修正那些灰度范围小,灰度集中的图像,通过修正使灰度拉开,灰度变丰富,从而起到增强图像视觉效果的作用。
实现方案:
根据书本上所介绍的方法计算变换函数Sk和对应每个Sk的Nsk,,最后求得每个灰度级均衡化后所得的概率。
再根据所得的概率画出均衡化后的直方图,比较与均衡化前的直方图的区别,分析两者的差别。
算法实验步骤:
步骤1:
原图像素点个数
步骤2:
原图分布概率
步骤3:
原图累计概率
步骤4:
对累计概率四舍五入
步骤5:
绘制直方图
intss[257];
for(i=0;i<257;i++){
ss[i]=0;
for(i=0;i<256;i++){
count[i]=count[i]*10000/pos;
ss[i+1]=ss[i]+count[i];
for(i=1;i<256;i++)
{for(intii=0;ii<256;ii++)
if((ii*10000/256)>ss[i+1])
p[i+1]=ii;
break;
if(p[i+1]!
=p[i])
kk++;
pp[kk]=i;
for(i=1;i<=kk;i++)
pDC->MoveTo(500+2*i,600);
pDC->LineTo(500+2*i,600-(ss[pp[i]]-ss[pp[i-1]]));
五、实验结果
1、线性变换
原图线性变换后
2、直方图均衡化
均衡化后
均衡化前直方图
均衡化后直方图
程序显示结果
实验二图像增强(任选两模块)
模块一图像锐化
掌握图像锐化的基本原理,掌握拉普拉斯算子锐化的方法,熟悉计算机上进行图像锐化的方法。
编写简单锐化及拉普拉斯算子锐化的C++MFC程序,根据所显示的图像,和原图比较,分析锐化后的效果。
拉普拉斯算子是与一个边缘方向无关的边缘点检测算子。
它对孤立像素的响应要比对边缘或线的响应更强烈,因此使用该算子进行图像锐化之前需要对图像作平滑处理。
拉普拉斯算子是一种二阶微分算子一个连续的二元函数f(x,y),其拉普拉斯运算定义为
对于数字图像,拉普拉斯算子可以简化为
g(i,j)=8f(i,j)-f(i+1,j)-f(i-1,j)-f(i,j+1)-f(i,j-1)
上面的表达式可以表示为卷积的形式。
即
表达式中的i,j=0,1,2….N-1;k=1。
,i=1,H(r,s)取样如下式子
采用拉普拉斯增强算子锐化后
模块二均值滤波
掌握均值滤波的基本原理,掌握计算邻域均值的方法,熟悉计算机上进行均值滤波的方法。
编写均值滤波及图像平滑化的C++MFC程序,根据所显示的图像,和原图比较,分析均值滤波图像平滑化后的效果。
最简单的局部平均法称为非加权邻域平均,它均等地对待邻域中的每个像素,即各个像素灰度值的平均值作为中心像素的输出值。
设有一副图像用均匀滤波所得的图像为g(x,y),则
,M表示集合s里像素的总数。
部分程序如下(详细见源文件):
均值滤波处理后
实验三:
自动阈值迭代法及Otsu法
方法一自动阈值迭代法
一、实验原理
开始时选择一个阈值作为初始估计值,然后按照某种策略不断地改进这一估计值,直到满足给定的准则为止
二、实验算法
(1)估计一个阈值T(比如均值)
(2)用阈值T将灰度直方图分割成两个区域R1和R2
(3)分别计算两个区域R1和R2内的灰度平均值u1和u2;
(4)选择新阈值T=(u1+u2)/2;
(5)重复上述工作3-5次,直到前后两次的阈值不变
for(inti=0;ifor(intj=0;j{c=dib.pData[i*height+j];sum+=c;}Ta=sum/N;Tb=Ta;//新阈值Tb,最佳阈值为Tcif(Tb!=Tc){Tc=Tb;intsuma=0,sumsa=0;intsumb=0,sumsb=0;for(intp=0;pfor(intq=0;q{c=dib.pData[p*width+q];if(c{suma+=c;sumsa++;}else{sumb+=c;sumsb++;}}ua=(float)suma/(float)sumsa;ub=(float)sumb/(float)sumsb;Tb=(int)(ua+ub)/2;}//比较for(intm=0;mfor(intn=0;n{c=dib.pData[m*width+n];if(c>Tb)dib.pData[m*width+n]=255;elsedib.pData[m*width+n]=0;}dib.DrawByPixel(pDC);四、实验结果迭代法方法二Otsu法一、实验原理大津法:对图像Image,记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。图像的总平均灰度为:u=w0*u0+w1*u1。从最小灰度值到最大灰度值遍历t,当t使得值g=w0*(u0-u)2+w1*(u1-u)2最大时t即为分割的最佳阈值。对大津法可作如下理解:该式实际上就是类间方差值,阈值t分割出的前景和背景两部分构成了整幅图像,而前景取值u0,概率为w0,背景取值u1,概率为w1,总均值为u,根据方差的定义即得该式。因方差是灰度分布均匀性的一种度量,方差值越大,说明构成图像的两部分差别越大,当部分目标错分为背景或部分背景错分为目标都导致两部分差别变小,因此使类间方差最大的分割意味着错分概率最小。二、实验算法自动阈值(Otsu法)步骤(1)计算直方图(2)设置初值:w(0)以及u(0)(3)从1到最大值设置阈值T。更新w(t)以及u(t)。计算σb(t)*σb(t)。(4)选取最大σb(t)*σb(t)对应的T三、实验步骤1、新建MFC工程;2、分析程序流程;3、编写程序;4、运行调试;5、显示结果;6、分析结果。部分程序如下(详细见源文件):for(intT=1;T<256;T++)//从1到255设置阈值T,U为平均灰度,W为平均概率{intsuma=0,sumsa=0;intsumb=0,sumsb=0;for(intd=0;dfor(inte=0;e{c=dib.pData[d*width+e];if(c{suma+=c;sumsa++;}else{sumb+=c;sumsb++;}}ua=(float)suma/(float)sumsa;wa=(float)sumwa/(float)N;ub=(float)sumb/(float)sumsb;wb=(float)sumwb/(float)N;//求的最大化类间方差D=wa*wb*(ua-ub)*(ua-ub);if(D>Dmax){Dmax=D;Tmax=T;}}for(intf=0;ffor(intg=0;g{c=dib.pData[f*width+g];//灰度阀值化if(cdib.pData[f*width+g]=0;elsedib.pData[f*width+g]=255;}dib.DrawByPixel(pDC); 四、实验结果Otsu法
for(intj=0;j{c=dib.pData[i*height+j];sum+=c;}Ta=sum/N;Tb=Ta;//新阈值Tb,最佳阈值为Tcif(Tb!=Tc){Tc=Tb;intsuma=0,sumsa=0;intsumb=0,sumsb=0;for(intp=0;pfor(intq=0;q{c=dib.pData[p*width+q];if(c{suma+=c;sumsa++;}else{sumb+=c;sumsb++;}}ua=(float)suma/(float)sumsa;ub=(float)sumb/(float)sumsb;Tb=(int)(ua+ub)/2;}//比较for(intm=0;mfor(intn=0;n{c=dib.pData[m*width+n];if(c>Tb)dib.pData[m*width+n]=255;elsedib.pData[m*width+n]=0;}dib.DrawByPixel(pDC);四、实验结果迭代法方法二Otsu法一、实验原理大津法:对图像Image,记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。图像的总平均灰度为:u=w0*u0+w1*u1。从最小灰度值到最大灰度值遍历t,当t使得值g=w0*(u0-u)2+w1*(u1-u)2最大时t即为分割的最佳阈值。对大津法可作如下理解:该式实际上就是类间方差值,阈值t分割出的前景和背景两部分构成了整幅图像,而前景取值u0,概率为w0,背景取值u1,概率为w1,总均值为u,根据方差的定义即得该式。因方差是灰度分布均匀性的一种度量,方差值越大,说明构成图像的两部分差别越大,当部分目标错分为背景或部分背景错分为目标都导致两部分差别变小,因此使类间方差最大的分割意味着错分概率最小。二、实验算法自动阈值(Otsu法)步骤(1)计算直方图(2)设置初值:w(0)以及u(0)(3)从1到最大值设置阈值T。更新w(t)以及u(t)。计算σb(t)*σb(t)。(4)选取最大σb(t)*σb(t)对应的T三、实验步骤1、新建MFC工程;2、分析程序流程;3、编写程序;4、运行调试;5、显示结果;6、分析结果。部分程序如下(详细见源文件):for(intT=1;T<256;T++)//从1到255设置阈值T,U为平均灰度,W为平均概率{intsuma=0,sumsa=0;intsumb=0,sumsb=0;for(intd=0;dfor(inte=0;e{c=dib.pData[d*width+e];if(c{suma+=c;sumsa++;}else{sumb+=c;sumsb++;}}ua=(float)suma/(float)sumsa;wa=(float)sumwa/(float)N;ub=(float)sumb/(float)sumsb;wb=(float)sumwb/(float)N;//求的最大化类间方差D=wa*wb*(ua-ub)*(ua-ub);if(D>Dmax){Dmax=D;Tmax=T;}}for(intf=0;ffor(intg=0;g{c=dib.pData[f*width+g];//灰度阀值化if(cdib.pData[f*width+g]=0;elsedib.pData[f*width+g]=255;}dib.DrawByPixel(pDC); 四、实验结果Otsu法
{c=dib.pData[i*height+j];
sum+=c;
Ta=sum/N;
Tb=Ta;//新阈值Tb,最佳阈值为Tc
if(Tb!
=Tc)
{Tc=Tb;
intsuma=0,sumsa=0;
intsumb=0,sumsb=0;
for(intp=0;pfor(intq=0;q{c=dib.pData[p*width+q];if(c{suma+=c;sumsa++;}else{sumb+=c;sumsb++;}}ua=(float)suma/(float)sumsa;ub=(float)sumb/(float)sumsb;Tb=(int)(ua+ub)/2;}//比较for(intm=0;mfor(intn=0;n{c=dib.pData[m*width+n];if(c>Tb)dib.pData[m*width+n]=255;elsedib.pData[m*width+n]=0;}dib.DrawByPixel(pDC);四、实验结果迭代法方法二Otsu法一、实验原理大津法:对图像Image,记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。图像的总平均灰度为:u=w0*u0+w1*u1。从最小灰度值到最大灰度值遍历t,当t使得值g=w0*(u0-u)2+w1*(u1-u)2最大时t即为分割的最佳阈值。对大津法可作如下理解:该式实际上就是类间方差值,阈值t分割出的前景和背景两部分构成了整幅图像,而前景取值u0,概率为w0,背景取值u1,概率为w1,总均值为u,根据方差的定义即得该式。因方差是灰度分布均匀性的一种度量,方差值越大,说明构成图像的两部分差别越大,当部分目标错分为背景或部分背景错分为目标都导致两部分差别变小,因此使类间方差最大的分割意味着错分概率最小。二、实验算法自动阈值(Otsu法)步骤(1)计算直方图(2)设置初值:w(0)以及u(0)(3)从1到最大值设置阈值T。更新w(t)以及u(t)。计算σb(t)*σb(t)。(4)选取最大σb(t)*σb(t)对应的T三、实验步骤1、新建MFC工程;2、分析程序流程;3、编写程序;4、运行调试;5、显示结果;6、分析结果。部分程序如下(详细见源文件):for(intT=1;T<256;T++)//从1到255设置阈值T,U为平均灰度,W为平均概率{intsuma=0,sumsa=0;intsumb=0,sumsb=0;for(intd=0;dfor(inte=0;e{c=dib.pData[d*width+e];if(c{suma+=c;sumsa++;}else{sumb+=c;sumsb++;}}ua=(float)suma/(float)sumsa;wa=(float)sumwa/(float)N;ub=(float)sumb/(float)sumsb;wb=(float)sumwb/(float)N;//求的最大化类间方差D=wa*wb*(ua-ub)*(ua-ub);if(D>Dmax){Dmax=D;Tmax=T;}}for(intf=0;ffor(intg=0;g{c=dib.pData[f*width+g];//灰度阀值化if(cdib.pData[f*width+g]=0;elsedib.pData[f*width+g]=255;}dib.DrawByPixel(pDC); 四、实验结果Otsu法
for(intq=0;q{c=dib.pData[p*width+q];if(c{suma+=c;sumsa++;}else{sumb+=c;sumsb++;}}ua=(float)suma/(float)sumsa;ub=(float)sumb/(float)sumsb;Tb=(int)(ua+ub)/2;}//比较for(intm=0;mfor(intn=0;n{c=dib.pData[m*width+n];if(c>Tb)dib.pData[m*width+n]=255;elsedib.pData[m*width+n]=0;}dib.DrawByPixel(pDC);四、实验结果迭代法方法二Otsu法一、实验原理大津法:对图像Image,记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。图像的总平均灰度为:u=w0*u0+w1*u1。从最小灰度值到最大灰度值遍历t,当t使得值g=w0*(u0-u)2+w1*(u1-u)2最大时t即为分割的最佳阈值。对大津法可作如下理解:该式实际上就是类间方差值,阈值t分割出的前景和背景两部分构成了整幅图像,而前景取值u0,概率为w0,背景取值u1,概率为w1,总均值为u,根据方差的定义即得该式。因方差是灰度分布均匀性的一种度量,方差值越大,说明构成图像的两部分差别越大,当部分目标错分为背景或部分背景错分为目标都导致两部分差别变小,因此使类间方差最大的分割意味着错分概率最小。二、实验算法自动阈值(Otsu法)步骤(1)计算直方图(2)设置初值:w(0)以及u(0)(3)从1到最大值设置阈值T。更新w(t)以及u(t)。计算σb(t)*σb(t)。(4)选取最大σb(t)*σb(t)对应的T三、实验步骤1、新建MFC工程;2、分析程序流程;3、编写程序;4、运行调试;5、显示结果;6、分析结果。部分程序如下(详细见源文件):for(intT=1;T<256;T++)//从1到255设置阈值T,U为平均灰度,W为平均概率{intsuma=0,sumsa=0;intsumb=0,sumsb=0;for(intd=0;dfor(inte=0;e{c=dib.pData[d*width+e];if(c{suma+=c;sumsa++;}else{sumb+=c;sumsb++;}}ua=(float)suma/(float)sumsa;wa=(float)sumwa/(float)N;ub=(float)sumb/(float)sumsb;wb=(float)sumwb/(float)N;//求的最大化类间方差D=wa*wb*(ua-ub)*(ua-ub);if(D>Dmax){Dmax=D;Tmax=T;}}for(intf=0;ffor(intg=0;g{c=dib.pData[f*width+g];//灰度阀值化if(cdib.pData[f*width+g]=0;elsedib.pData[f*width+g]=255;}dib.DrawByPixel(pDC); 四、实验结果Otsu法
c=dib.pData[p*width+q];
if(c{suma+=c;sumsa++;}else{sumb+=c;sumsb++;}}ua=(float)suma/(float)sumsa;ub=(float)sumb/(float)sumsb;Tb=(int)(ua+ub)/2;}//比较for(intm=0;mfor(intn=0;n{c=dib.pData[m*width+n];if(c>Tb)dib.pData[m*width+n]=255;elsedib.pData[m*width+n]=0;}dib.DrawByPixel(pDC);四、实验结果迭代法方法二Otsu法一、实验原理大津法:对图像Image,记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。图像的总平均灰度为:u=w0*u0+w1*u1。从最小灰度值到最大灰度值遍历t,当t使得值g=w0*(u0-u)2+w1*(u1-u)2最大时t即为分割的最佳阈值。对大津法可作如下理解:该式实际上就是类间方差值,阈值t分割出的前景和背景两部分构成了整幅图像,而前景取值u0,概率为w0,背景取值u1,概率为w1,总均值为u,根据方差的定义即得该式。因方差是灰度分布均匀性的一种度量,方差值越大,说明构成图像的两部分差别越大,当部分目标错分为背景或部分背景错分为目标都导致两部分差别变小,因此使类间方差最大的分割意味着错分概率最小。二、实验算法自动阈值(Otsu法)步骤(1)计算直方图(2)设置初值:w(0)以及u(0)(3)从1到最大值设置阈值T。更新w(t)以及u(t)。计算σb(t)*σb(t)。(4)选取最大σb(t)*σb(t)对应的T三、实验步骤1、新建MFC工程;2、分析程序流程;3、编写程序;4、运行调试;5、显示结果;6、分析结果。部分程序如下(详细见源文件):for(intT=1;T<256;T++)//从1到255设置阈值T,U为平均灰度,W为平均概率{intsuma=0,sumsa=0;intsumb=0,sumsb=0;for(intd=0;dfor(inte=0;e{c=dib.pData[d*width+e];if(c{suma+=c;sumsa++;}else{sumb+=c;sumsb++;}}ua=(float)suma/(float)sumsa;wa=(float)sumwa/(float)N;ub=(float)sumb/(float)sumsb;wb=(float)sumwb/(float)N;//求的最大化类间方差D=wa*wb*(ua-ub)*(ua-ub);if(D>Dmax){Dmax=D;Tmax=T;}}for(intf=0;ffor(intg=0;g{c=dib.pData[f*width+g];//灰度阀值化if(cdib.pData[f*width+g]=0;elsedib.pData[f*width+g]=255;}dib.DrawByPixel(pDC); 四、实验结果Otsu法
{suma+=c;
sumsa++;
else
sumb+=c;
sumsb++;
ua=(float)suma/(float)sumsa;
ub=(float)sumb/(float)sumsb;
Tb=(int)(ua+ub)/2;
}//比较
for(intm=0;mfor(intn=0;n{c=dib.pData[m*width+n];if(c>Tb)dib.pData[m*width+n]=255;elsedib.pData[m*width+n]=0;}dib.DrawByPixel(pDC);四、实验结果迭代法方法二Otsu法一、实验原理大津法:对图像Image,记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。图像的总平均灰度为:u=w0*u0+w1*u1。从最小灰度值到最大灰度值遍历t,当t使得值g=w0*(u0-u)2+w1*(u1-u)2最大时t即为分割的最佳阈值。对大津法可作如下理解:该式实际上就是类间方差值,阈值t分割出的前景和背景两部分构成了整幅图像,而前景取值u0,概率为w0,背景取值u1,概率为w1,总均值为u,根据方差的定义即得该式。因方差是灰度分布均匀性的一种度量,方差值越大,说明构成图像的两部分差别越大,当部分目标错分为背景或部分背景错分为目标都导致两部分差别变小,因此使类间方差最大的分割意味着错分概率最小。二、实验算法自动阈值(Otsu法)步骤(1)计算直方图(2)设置初值:w(0)以及u(0)(3)从1到最大值设置阈值T。更新w(t)以及u(t)。计算σb(t)*σb(t)。(4)选取最大σb(t)*σb(t)对应的T三、实验步骤1、新建MFC工程;2、分析程序流程;3、编写程序;4、运行调试;5、显示结果;6、分析结果。部分程序如下(详细见源文件):for(intT=1;T<256;T++)//从1到255设置阈值T,U为平均灰度,W为平均概率{intsuma=0,sumsa=0;intsumb=0,sumsb=0;for(intd=0;dfor(inte=0;e{c=dib.pData[d*width+e];if(c{suma+=c;sumsa++;}else{sumb+=c;sumsb++;}}ua=(float)suma/(float)sumsa;wa=(float)sumwa/(float)N;ub=(float)sumb/(float)sumsb;wb=(float)sumwb/(float)N;//求的最大化类间方差D=wa*wb*(ua-ub)*(ua-ub);if(D>Dmax){Dmax=D;Tmax=T;}}for(intf=0;ffor(intg=0;g{c=dib.pData[f*width+g];//灰度阀值化if(cdib.pData[f*width+g]=0;elsedib.pData[f*width+g]=255;}dib.DrawByPixel(pDC); 四、实验结果Otsu法
for(intn=0;n{c=dib.pData[m*width+n];if(c>Tb)dib.pData[m*width+n]=255;elsedib.pData[m*width+n]=0;}dib.DrawByPixel(pDC);四、实验结果迭代法方法二Otsu法一、实验原理大津法:对图像Image,记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。图像的总平均灰度为:u=w0*u0+w1*u1。从最小灰度值到最大灰度值遍历t,当t使得值g=w0*(u0-u)2+w1*(u1-u)2最大时t即为分割的最佳阈值。对大津法可作如下理解:该式实际上就是类间方差值,阈值t分割出的前景和背景两部分构成了整幅图像,而前景取值u0,概率为w0,背景取值u1,概率为w1,总均值为u,根据方差的定义即得该式。因方差是灰度分布均匀性的一种度量,方差值越大,说明构成图像的两部分差别越大,当部分目标错分为背景或部分背景错分为目标都导致两部分差别变小,因此使类间方差最大的分割意味着错分概率最小。二、实验算法自动阈值(Otsu法)步骤(1)计算直方图(2)设置初值:w(0)以及u(0)(3)从1到最大值设置阈值T。更新w(t)以及u(t)。计算σb(t)*σb(t)。(4)选取最大σb(t)*σb(t)对应的T三、实验步骤1、新建MFC工程;2、分析程序流程;3、编写程序;4、运行调试;5、显示结果;6、分析结果。部分程序如下(详细见源文件):for(intT=1;T<256;T++)//从1到255设置阈值T,U为平均灰度,W为平均概率{intsuma=0,sumsa=0;intsumb=0,sumsb=0;for(intd=0;dfor(inte=0;e{c=dib.pData[d*width+e];if(c{suma+=c;sumsa++;}else{sumb+=c;sumsb++;}}ua=(float)suma/(float)sumsa;wa=(float)sumwa/(float)N;ub=(float)sumb/(float)sumsb;wb=(float)sumwb/(float)N;//求的最大化类间方差D=wa*wb*(ua-ub)*(ua-ub);if(D>Dmax){Dmax=D;Tmax=T;}}for(intf=0;ffor(intg=0;g{c=dib.pData[f*width+g];//灰度阀值化if(cdib.pData[f*width+g]=0;elsedib.pData[f*width+g]=255;}dib.DrawByPixel(pDC); 四、实验结果Otsu法
{c=dib.pData[m*width+n];
if(c>Tb)
dib.pData[m*width+n]=255;
dib.pData[m*width+n]=0;
dib.DrawByPixel(pDC);
四、实验结果
迭代法
方法二Otsu法
大津法:
对图像Image,记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。
图像的总平均灰度为:
u=w0*u0+w1*u1。
从最小灰度值到最大灰度值遍历t,当t使得值g=w0*(u0-u)2+w1*(u1-u)2最大时t即为分割的最佳阈值。
对大津法可作如下理解:
该式实际上就是类间方差值,阈值t分割出的前景和背景两部分构成了整幅图像,而前景取值u0,概率为w0,背景取值u1,概率为w1,总均值为u,根据方差的定义即得该式。
因方差是灰度分布均匀性的一种度量,方差值越大,说明构成图像的两部分差别越大,当部分目标错分为背景或部分背景错分为目标都导致两部分差别变小,因此使类间方差最大的分割意味着错分概率最小。
自动阈值(Otsu法)步骤
(1)计算直方图
(2)设置初值:
w(0)以及u(0)
(3)从1到最大值设置阈值T。
更新w(t)以及u(t)。
计算σb(t)*σb(t)。
(4)选取最大σb(t)*σb(t)对应的T
for(intT=1;T<256;T++)//从1到255设置阈值T,U为平均灰度,W为平均概率
{intsuma=0,sumsa=0;
for(intd=0;dfor(inte=0;e{c=dib.pData[d*width+e];if(c{suma+=c;sumsa++;}else{sumb+=c;sumsb++;}}ua=(float)suma/(float)sumsa;wa=(float)sumwa/(float)N;ub=(float)sumb/(float)sumsb;wb=(float)sumwb/(float)N;//求的最大化类间方差D=wa*wb*(ua-ub)*(ua-ub);if(D>Dmax){Dmax=D;Tmax=T;}}for(intf=0;ffor(intg=0;g{c=dib.pData[f*width+g];//灰度阀值化if(cdib.pData[f*width+g]=0;elsedib.pData[f*width+g]=255;}dib.DrawByPixel(pDC); 四、实验结果Otsu法
for(inte=0;e{c=dib.pData[d*width+e];if(c{suma+=c;sumsa++;}else{sumb+=c;sumsb++;}}ua=(float)suma/(float)sumsa;wa=(float)sumwa/(float)N;ub=(float)sumb/(float)sumsb;wb=(float)sumwb/(float)N;//求的最大化类间方差D=wa*wb*(ua-ub)*(ua-ub);if(D>Dmax){Dmax=D;Tmax=T;}}for(intf=0;ffor(intg=0;g{c=dib.pData[f*width+g];//灰度阀值化if(cdib.pData[f*width+g]=0;elsedib.pData[f*width+g]=255;}dib.DrawByPixel(pDC); 四、实验结果Otsu法
{c=dib.pData[d*width+e];
if(c{suma+=c;sumsa++;}else{sumb+=c;sumsb++;}}ua=(float)suma/(float)sumsa;wa=(float)sumwa/(float)N;ub=(float)sumb/(float)sumsb;wb=(float)sumwb/(float)N;//求的最大化类间方差D=wa*wb*(ua-ub)*(ua-ub);if(D>Dmax){Dmax=D;Tmax=T;}}for(intf=0;ffor(intg=0;g{c=dib.pData[f*width+g];//灰度阀值化if(cdib.pData[f*width+g]=0;elsedib.pData[f*width+g]=255;}dib.DrawByPixel(pDC); 四、实验结果Otsu法
suma+=c;
wa=(float)sumwa/(float)N;
wb=(float)sumwb/(float)N;
//求的最大化类间方差
D=wa*wb*(ua-ub)*(ua-ub);
if(D>Dmax)
{Dmax=D;
Tmax=T;
for(intf=0;ffor(intg=0;g{c=dib.pData[f*width+g];//灰度阀值化if(cdib.pData[f*width+g]=0;elsedib.pData[f*width+g]=255;}dib.DrawByPixel(pDC); 四、实验结果Otsu法
for(intg=0;g{c=dib.pData[f*width+g];//灰度阀值化if(cdib.pData[f*width+g]=0;elsedib.pData[f*width+g]=255;}dib.DrawByPixel(pDC); 四、实验结果Otsu法
{c=dib.pData[f*width+g];
//灰度阀值化
if(cdib.pData[f*width+g]=0;elsedib.pData[f*width+g]=255;}dib.DrawByPixel(pDC); 四、实验结果Otsu法
dib.pData[f*width+g]=0;
dib.pData[f*width+g]=255;
Otsu法
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1