1、阈值法图像分割实验报告1 实验目的图像分割阈值法具有实现容易、计算量小、性能稳定等优点。因此这种方法成为图像分割领域中应用最普遍的方法。本文主要讨论了基于直方图法的图像分割的设计与实现,并与迭代法进行了对比实验。2 实验环境Microsoft VC+6.0 软件平台,32 位 Windows XP 操作系统。3 实验原理基础3.1 直方图法直方图阈值法其阈值主要通过分析图像的灰度直方图来进行确定。假定一幅图像如图 3-1 所示,其中背景是灰色,物体为灰白色的,背景中的黑色像素产生了(,)fxy直方图的左锋,而物体的各灰度级产生了直方图的右峰。由于物体边界像素数相对而言较少,从而产生两峰之间的谷
2、,选择谷对应的灰度值作为阈值 T,利用式 3.1,可以得到一幅二值图像 ,用于后续处理和分析。(,)gxy(3.1)0,(),25,fxyT背景部分 物体部分0 2 5 5阈值 T图 3-1 利用直方图选择二值化阈值3.2 迭代法(用于对比试验)迭代法也是一种在图像分割过程中选择合适阈值的方法。它是基于逼近的思想通过阈值迭代的方式 利用程序自动计算出比较合适的分割阈值。迭代法指在初始条件中假设一个阈值,而通过对图像的迭代运算来不断地更新这一假设阈值来得到最佳阈值。迭代法阈值分割主要算法:1 求出图像最小灰度值 和最大灰度值 计算初始阈值为minRmaxRminax02RT2 根据阈值将图像分割
3、成目标和背景两部分,求出两部分的平均灰度值 (,)0(,),(,)kkRijTijijNij(,)(,),(,)kkRijTGijijNij为图像上 点的灰度值, 为 点的权重系数,一般 为 ,ij,j(,ij (,)ij的个数 T 为阈值()3. 重新选择阈值 ,新的阈值 定义为1k1kT012GkR4. 循环做第二步到第四步,当 则结束,即可获得最佳阈值来对图像进行1k分割。4 程序设计4.1 直方图法算法流程如 Error! Not a valid bookmark self-reference.所示。输入图像统计直方图确定波峰波谷确定阈值 T 二值化图像 保存图 4-1 直方图阈值法算
4、法流程统计直方图和阈值分割流程图如 图 4-所示。输入图像读信息头 l p b i t获取位图数据文件首地址 L获取图像宽度 W 和高度Hi = 0 , j = 0i Tj = j + 1Y e sY e sY e sN oi = i + 1N o结束N o* ( l p b i t + i * w i d t h + j ) =0* ( l p b i t + i * w i d t h + j ) =2 5 5(a)统计直方图 (b)阈值分割图 4-2 程序设计流程图4.2 关键程序语段unsigned i,j; / 循环变量unsigned char pixel; / 像素值long l
5、Histogram256; / 直方图数组LONG lLineBytes; / 图像每行的字节数/获得直方图for (i = 0;i 256 ;i+)/初始化数组lHistogrami=0;lLineBytes = WIDTHBYTES(width * 8);/ 计算图像每行的字节数for (i = 0;i width ;i+)for(j = 0;j height ;j+)/ 指向源图像倒数第 j 行,第 i 个象素的指针pixel = *(buf+lLineBytes * j + i);lHistogrampixel+;/初始化阈值unsigned char yuzhi=0;/创建阈值选择对
6、话框CFENGE dlg1;dlg1.m_Yuzhi=0;/在对话框里输出说明文字CString ss;ss.Format(“如果峰值较多,建议用迭代法 “);dlg1.m_ShuChu+=ss;/ 显示对话框,提示用户输入阈值for (i = 0; i 256; i+)dlg1.m_fIntensityi = (float)lHistogrami; if (dlg1.DoModal() != IDOK)return; / 返回yuzhi=(unsigned char)dlg1.m_Yuzhi;delete dlg1;/ 删除对话框/根据阈值将图像二值化for ( i = 0;i width
7、;i+)for(j = 0;j height ;j+)pixel = *(buf+lLineBytes * j + i);if(pixel= yuzhi)*(buf+lLineBytes * j + i)=(unsigned char)0;else*(buf+lLineBytes * j + i)=(unsigned char)255;5 实验结果5.1 程序界面运行程序生成可执行程序文件 TT.exe,文件操作界面如 图 5-1 所示。图 5-1 程序运行界面程序可读取、处理和保存 8 位灰度图像,并可对 8 位灰度图像进行图像分割操作,用户界面设计较人性化。5.2 示例 1对所示的目标图像
8、进行阈值分割处理,结果如 图 5-2 所示。(a) 目标图像 (b) 直方图统计结果图 5-2 图像分割直方图由图中可以看出,图像有很多峰,这样给我们选取峰谷确定阈值带来了一定的困难,下面我们将通过试探的方法,研究直方图法的优缺点分别选择不同阈值参数,对 图 5-3(a)所示的图像进行图像分割,结果如下图所示。其中(a )(e)为直方图法的处理结果,而(f)为迭代法的处理结果,用于对比直方图法选取阈值的合理性。(a)阈值 T=30 (b)阈值 T=50(c)阈值 T=60 (d)阈值 T=80(e)阈值 T=100 (f)迭代法,阈值 T=87图 5-3 不同阈值的图像分割效果图中(f)图为迭
9、代法的结果,阈值为 87,可以看出处理结果较理想,而其他阈值则不太理想,因为峰值太多,给阈值选取带来了很大困难。5.2 示例 2图像上半部分做了反色处理,这样可以更好地测试图像分割的目的性和作用。(a)目标图像 (b)直方图统计图图 5-4 直方图统计(a)阈值 T=50 (b)阈值 T=100(c)阈值 T=120 (d)迭代法,阈值 T=128图 5-5 不同阈值的图像分割效果从图中可以看出,这个示例的峰值相对较少,可以较好的选择阈值,以便于更好地分割图像,提取目标,可以看出处理后的图片比原始图片更加容易辨认目标,基本上达到了目的。6 结论6.1 算法性能分析由实验结果可以看出,阈值法图像
10、分割中迭代法的处理结果比较理想,可以作为一个很好的参考,对于直方图阈值法来说,虽然操作简单方便,但有以下缺点:1. 不适合处理峰值较多,灰度级分布较密的图像。2. 无法获得最优阈值,因此无法获得最佳结果。6.2 总结通过光学图像处理课程的学习,我们对数字图像的来源,显示,处理等过程有了初步了解。对光学系统的成像过程,数字图像的传输,编码,复原,分割,压缩等理论知识和关键技术有了较系统的掌握,并能够得以初步应用。通过这一段时间的图像处理实践过程,我们对 BMP 格式图像的数据结构有了更深入的了解,能够灵活运用 C+编程语言对 BMP 图像进行读写,存储以及一些简单处理等操作,对阈值法图像分割操作
11、体会尤深。总之,光学图像处理课程的开设对我们的学习,科研等有较大帮助,虽然研究内容与之相关甚微,但老师在课程中提出的研究问题的思想与方法让我们受益匪浅。7 附录/迭代求最佳阈值iNewThreshold = (iMin + iMax)/2;iThreshold = 0;for(iIterationTimes = 0; iThreshold != iNewThreshold iIterationTimes +)iThreshold = iNewThreshold;lP1 =0;lP2 =0;lS1 = 0;lS2 = 0;/求两个区域的灰度平均值for (i = iMin;i iThreshold;i+)lP1 += lHistogrami*i;lS1 += lHistogrami;iMean1 =(unsigned char)(lP1 / lS1);for (i = iThreshold+1;i iMax;i+)lP2 += lHistogrami*i;lS2 += lHistogrami;iMean2 = (unsigned char)(lP2 / lS2);iNewThreshold = (iMean1 + iMean2)/2;