图像分割--使用迭代算法的全局阈值处理

本文介绍了一种基于迭代方法的全局阈值图像分割技术。通过选取初始阈值并不断迭代直至阈值稳定,实现图像中前景与背景的有效分离。文章详细阐述了分割过程中的关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本全局阈值法


当图像由暗色背景和较亮物体组成时,从背景中提取出物体的方法是选择一个将两种灰度值分开的阈值T,f(x,y)> T 的任何点(x,y)

为一个对象点,否则将该点称为背景点。那么,分割后的图像g(x,y)由以下式子给出:




在这里:

阈值T可以是一个常数,则使用的是全局阈值处理

阈值T可以在一幅图上改变,则使用可变阈值处理

阈值T可以是多个,则使用双()阈值处理


比如下列灰度直方图,左侧可以使用单阈值,右侧则需要双阈值进行分割。



用迭代方法的全局阈值处理

在实际处理中,通常图像之间有较大变化,即使对每一幅图片使用全局阈值是可行的,但我们也需要有能力对每一幅图片进行自

动、估计阈值。因此,迭代方法就是用于这个目的:

1.为全局阈值T选择一个初始值(一般选择平均灰度)

2.T分割该图像,这将产生两组像素:G1由灰度值大于T的所有像素组成,G2由灰度值小于T

的所有像素组成

3.G1G2的像素分别计算平均灰度值m1m2

4.计算一个新的阈值:

                                            T=(m1+m2)/2

5.重复步骤2到步骤4,直到连续迭代中的T值间的差小于一个预定义的参数t为止。



 // nMaxIter:最大迭代次数;nDiffRec:使用给定阀值确定的亮区与暗区平均灰度差异值  
 int DetectThreshold(IplImage*img, int nMaxIter, int& iDiffRec) //阀值分割:迭代法  
 {  
 		 //图像信息  
		 int height = img->height;  
		 int width = img->width;  
		 int step = img->widthStep/sizeof(uchar);  
		 uchar *data = (uchar*)img->imageData;  
		   
		 iDiffRec =0;  
		 int F[256]={ 0 }; //直方图数组  
		 int iTotalGray=0;//灰度值和  
		 int iTotalPixel =0;//像素数和  
		 byte bt;//某点的像素值  
		   
		 uchar iThrehold,iNewThrehold;//阀值、新阀值  
		 uchar iMaxGrayValue=0,iMinGrayValue=255;//原图像中的最大灰度值和最小灰度值  
		 uchar iMeanGrayValue1,iMeanGrayValue2;  
		   
		 //获取(i,j)的值,存于直方图数组F  
		 for(int i=0;iiMaxGrayValue)  
				 		iMaxGrayValue = bt;  
				 F[bt]++;  
			 }  
		 }  
		   
		 iThrehold =0;//  
		 iNewThrehold = (iMinGrayValue+iMaxGrayValue)/2;//初始阀值  
		 iDiffRec = iMaxGrayValue - iMinGrayValue;  
		   
		 for(int a=0;(abs(iThrehold-iNewThrehold)>0.5)&&a


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值