二维直方图区域斜分的最大熵阈值分割算法
- 格式:pdf
- 大小:604.50 KB
- 文档页数:7
二维直方图斜分最大类间交叉熵的图像分割张新明;刘斌;李双;张慧云【摘要】利用二维直方图斜分原理,提出了一种基于最大类间交叉熵的快速图像分割方法.首先依据二维直方图斜分法构建最大类间交叉熵周值选取公式,然后导出这种最大类间交叉熵阈值选取的快速递推算法,最后将定义的数组运算与这种快速算法相结合搜索最佳阈值向量,使整个算法更简明高效.实验结果表明,与当前二维直方图斜分阈值方法相比,此算法效率更高,通用性更强.【期刊名称】《计算机应用》【年(卷),期】2010(030)009【总页数】5页(P2453-2457)【关键词】图像分割;阈值化;二维直方图斜分;最大类间交叉熵;递推算法【作者】张新明;刘斌;李双;张慧云【作者单位】河南师范大学,计算机与信息技术学院,河南,新乡,453007;湖北大学,数学与计算机科学学院,武汉,430062;河南师范大学,计算机与信息技术学院,河南,新乡,453007;河南师范大学,计算机与信息技术学院,河南,新乡,453007【正文语种】中文【中图分类】TP391.41;TN911.730 引言图像分割是计算机视觉中的一个关键问题,特征提取和目标识别都是以图像分割作为基础的。
在众多的分割方法中,阈值化方法因其简单、计算量小、性能较稳定而成为图像分割中应用最广泛的分割技术。
常用的阈值法有最大类间方差法(Otsu)、最大熵法和最小交叉熵方法等[1-3]。
这些方法在最初提出时都通过图像的一维灰度直方图来选取阈值。
一维直方图虽然处理速度快,但不能反映图像的局部空间信息,当图像受到噪声干扰、光照不均匀等因素影响时,难以获得满意的分割效果,甚至产生分割错误。
因此,Abutaleb等人将最大熵方法从一维拓展到了二维[4],其效果较一维方法有明显改善,但同时由于将一维搜索空间扩大为二维,加上变成二维后算法本身的复杂性,导致运算量按指数增长,运算速度慢。
梅蓉等人将最小交叉熵法推广到二维情况[5],为了避免该方法大量计算时间消耗,文中采用遗传算法来近似优化最小交叉熵分割准则。
二维最大熵二维最大熵是一种基于最大熵原理的图像分割方法,它利用了图像的灰度信息和邻域的空间相关信息,通过构造二维直方图来选择最佳的分割阈值。
二维最大熵不仅反映了灰度分布信息,还反映了邻域平均灰度信息,因此在图像信噪比较低时,二维最大熵法明显优于一维最大熵法。
最大熵原理最大熵原理是统计学习的一般原理,它指出,当我们需要对一个随机事件的概率分布进行预测时,我们的预测应当满足全部已知的条件,而对未知的情况不要做任何主观假设。
换句话说,我们应该选择使得信息熵最大的概率分布作为最优的预测模型。
信息熵是一种衡量随机变量不确定性的度量,它定义为:H(X)=−∑xP(x)log P(x)其中X是一个离散随机变量,P(x)是X取值为x的概率。
信息熵越大,表示X的不确定性越大。
按照最大熵原理,我们应该选择使得H(X)最大的概率分布P(x)作为最优模型。
当然,在选择模型时,还要满足一些已知的约束条件,例如期望值、方差等。
这样,我们就可以将最大熵模型转化为一个约束优化问题,利用拉格朗日乘子法或者其他优化算法求解。
二维直方图二维直方图是一种描述图像中两个相关变量之间分布关系的直方图。
在二维最大熵方法中,我们通常使用点灰度和区域灰度均值作为两个相关变量。
点灰度指的是图像中每个像素的灰度值,区域灰度均值指的是每个像素邻域内(例如3×3或5×5)所有像素灰度值的平均值。
这样,每个像素都对应一个点灰度-区域灰度均值对(f(x,y),g(x,y)),其中f(x,y)是点灰度,g(x,y)是区域灰度均值。
如果图像有L个灰度级(例如L=256),那么这样的数据对有L×L种可能的取值。
设n ij为图像中点灰度为i及其区域灰度均值为j的像素点数,p ij为点灰度-区域灰度均值对(i,j)发生的概率,则p ij=n ij N×N其中N×N是图像的总像素数。
则{p ij,i,j=0,1,…,L−1}就是该图像关于点灰度-区域灰度均值的二维直方图。
python最大熵阈值分割摘要:1.最大熵阈值分割简介2.最大熵阈值分割原理3.最大熵阈值分割在Python 中的实现4.结论正文:1.最大熵阈值分割简介最大熵阈值分割是一种基于熵的图像分割方法。
熵是信息论中的一个重要概念,用于衡量一个事件的不确定性。
在图像分割中,最大熵阈值分割算法通过计算图像的熵来确定最佳阈值,使得分割后的前景和背景两部分熵之和最大。
这种方法可以用于二值图像、灰度图像和彩色图像的分割。
2.最大熵阈值分割原理最大熵阈值分割的原理如下:(1) 计算图像的直方图,得到像素值的概率分布。
(2) 计算图像的熵,表示为各像素值概率分布的加权熵之和。
(3) 设定一个阈值,将图像分为前景和背景两部分。
(4) 计算分割后前景和背景的熵之和。
(5) 求解使熵之和最大的阈值,即为最佳阈值。
3.最大熵阈值分割在Python 中的实现在Python 中,可以使用OpenCV 库实现最大熵阈值分割。
以下是一个简单的示例代码:```pythonimport cv2# 读取图像image = cv2.imread("image.jpg", cv2.IMREAD_GRAYSCALE)# 计算直方图hist, _ = cv2.calcHist([image], [0], None, [256], cv2.HIST_GRAYSCALE) # 计算熵entropy = -np.sum(hist * np.log2(hist + 1e-5))# 设定阈值threshold = 128# 进行最大熵阈值分割_, binary_image = cv2.threshold(image, threshold, 255,cv2.THRESH_BINARY)# 显示结果cv2.imshow("Original Image", image)cv2.imshow("Binary Image", binary_image)cv2.waitKey(0)cv2.destroyAllWindows()```4.结论最大熵阈值分割是一种基于熵的图像分割方法,可以用于二值图像、灰度图像和彩色图像的分割。
二维最大熵阈值分割
二维最大熵阈值分割算法
若一幅图像的灰度级数为L,总的象素点数为N(m×n),设f i,j 为图像中点灰度为i及其区域灰度均值为j的象素点数,p i,j为点灰度-区域灰度均值对(i,j)发生的概率,即:p i,j=f i,j/N,其中N (m×n)为图像的总象素数,则{p i,j,i,j=1,2,…,L}是该图像关于点灰度-区域灰度均值的二维直方图。
图1为二维直方图的xoy平面图。
沿对角线分布的A区和B区分别代表目标和背景,远离对角线的C区和D区代表边界和噪声,所以应该在A区和B区上利用点灰度-区域灰度均值二维最大熵法确定最佳阈值,可使真正代表目标和背景的信息量最大。
于是,定义离散二维熵为:
3 二维最大熵阈值分割递推算法
在上述二维阈值化方法中,对于每个(s,t)对,都要从头开始计算P A(s,t)和H A(s,t),运算过程是一个4重循环,计算复杂性为,计算比较耗时。
实际应用中,为了提高运算速度,减少重复计算,必须对二维最大熵进行进一步优化。
对于一个固定的s,当t取1-L时,计算Φ(s,t)已经不存在重复计算,但同样s也要从1取到L,这样
这样通过优化,该递推算法可将计算的复杂性减至O(L2),大大减少了计算的复杂性,提高了计算速度。
具体算法实现如下:(1)计算原始图像中各个象素点的灰度值以及各个象素点的4邻域平均灰度值,并计算统计灰度信息P[i][j];
(2)相关计算
(3)求出最佳阈值(s*,t*),分割图像。
二维最大熵阈值分割算法[引用]杜峰,施文康,邓勇等:《一种快速红外图像分割方法》1. 二维最大熵阈值分割熵是平均信息量的表征。
二维最大熵法是基于图像二维直方图。
图像二维直方图定义如下:NM n P j i j i ⨯=,,其中N M ⨯表示图像大小,j i n ,表示图像灰度值为i ,邻域灰度平均值为j 的像素个数。
通常二维直方图的平面示意图可以用下图1表示:其中区域1和2表示背景和目标像素,区域3和4通常表示边界和噪声信息。
阈值向量(t ,s ),t 表示灰度值,s 表示像素邻域均值(通常是8邻域)。
对于L 个灰度级的图像,设在阈值(t,s)定义区域1和2的概率P1,P2:∑∑-=-==101,1s i t j ji PP ,∑∑-=-==11,2L s i L tj j i P P定义二维离散熵H 的一般表示:∑∑-=ijji ji P PH ,,lg对各区域概率j i P ,进行归一化处理可得区域1的二维熵:11)1lg(1lg 1)1(101,,P H P P P P P H s i t j j i ji +=⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛-=∑∑-=-= 同理区域2的二维熵:22)2lg()2(P H P H +=其中,H 1,H 2为:∑∑-=-=-=101,,lg 1s i t j ji ji P PH ,∑∑-=-=-=11,,lg 2L s i L tj j i j i P P H那么整个图像中目标和背景熵之和的函数)2()1(),(H H t s +=φ根据最大熵原则,存在最佳的阈值向量满足条件:图1 二维直方图平面示意图灰阶)},(max{),(t s t s φφ=**图2显示了一幅图像的二维直方图说明了背景和目标的主要分布情况,其中图2(b)横坐标表示邻域的均值,纵坐标表示灰度值分布:2. 微粒群寻优算法(PSO )PSO 最早由Kenredy 和Eberhart 于1995年提出。
%%%%%%%%%%%%%%%%%%% 二维最大熵阈值分割法%%%%%%%%%%%%%%%%%%[filename,pathname]=uigetfile;img=imread(strcat(pathname,filename));figure(1);subplot(221);imshow(img);subplot(222);imhist(img(:,1));subplot(223);imhist(img(:,2));subplot(224);imhist(img(:,3));%%%%%%%%%%%%% 这个地方出现了一个问题就是为什么MidValue=img(i,j-1,1)+img(i-1,j,1)+img(i%%%%%%%%%%%%% +1,j,1)+img(i,j+1,1)最大值为256,难道是默认的一个BYTE类型吗???p=zeros(256,256);[m,n,k]=size(img);for i=2:m-1for j=2:n-1MidValue=img(i,j-1,1)/4+img(i-1,j,1)/4+img(i+1,j,1)/4+img(i,j+1,1)/4;MidValue=round(MidValue);p(img(i,j,1)+1,MidValue+1)=p(img(i,j,1)+1,MidValue+1)+1;end;end;%图像的四个角,只有2领域的点儿p(img(1,1,1)+1,round((img(1,2,1)/2+img(2,1,1)/2))+1)=p(img(1,1,1)+1,round((img(1,2,1)/2+img( 2,1,1)/2))+1)+1;p(img(1,n,1)+1,round((img(1,n-1,1)/2+img(2,n,1)/2))+1)=p(img(1,n,1)+1,round((img(1,n-1,1)/2+i mg(2,n,1)/2))+1)+1;p(img(m,1,1)+1,round((img(m-1,1,1)/2+img(m,2,1)/2))+1)=p(img(m,1,1)+1,round((img(m-1,1,1)/ 2+img(m,2,1)/2))+1)+1;p(img(m,n,1)+1,round((img(m,n-1,1)/2+img(m-1,n,1)/2))+1)=p(img(m,n,1)+1,round((img(m,n-1, 1)/2+img(m-1,n,1)/2))+1)+1;%图像周围的一圈,只有3领域的点儿for j=2:n-1MidValue=img(1,j-1,1)/3+img(1,j+1,1)/3+img(2,j,1)/3;MidValue=round(MidV alue);p(img(1,j,1)+1,MidValue+1)= p(img(1,j,1)+1,MidV alue+1,1)+1;end;for j=2:n-1MidValue=img(m,j-1,1)/3+img(m,j+1,1)/3+img(m-1,j,1)/3;MidValue=round(MidV alue);p(img(m,j,1)+1,MidValue+1)= p(img(m,j,1)+1,MidValue+1)+1;end;for i=2:m-1MidValue=img(i-1,1,1)/3+img(i+1,1,1)/3+img(i,2,1)/3;MidValue=round(MidV alue);p(img(i,1,1)+1,MidValue+1)= p(img(i,1,1)+1,MidV alue+1)+1;end;for i=2:m-1MidValue=img(i-1,n,1)/3+img(i+1,n,1)/3+img(i,n-1,1)/3;MidValue=round(MidV alue);p(img(i,n,1)+1,MidValue+1)= p(img(i,n,1)+1,MidValue+1)+1;end;p=p/(m*n);%%%%%%%%%%%% 忽略噪音的影响%%%%%%%%%%%%%%%%%%%%%%%%%%%pa=0;ha=0;hn=0;s=10;t=10;Qst=0;temp_t=10;temp_s=10;for i=1:256for j=1:256if(p(i,j)>0)hn=hn+log2(p(i,j))*p(i,j)*(-1);end;end;end;for t=10:256for s=10:256ha=0;pa=0;for i=1:tfor j=1:spa=pa+p(i,j);end;end;for i=1:tfor j=1:sif(p(i,j)>0)ha=ha+log2(p(i,j))*p(i,j)*(-1);end;end;end;if(pa>0&&1-pa>0)if(log2(pa*(1-pa))+ha/pa+(hn-ha)/(1-pa)>Qst)Qst=log2(pa*(1-pa))+ha/pa+(hn-ha)/(1-pa);temp_t=t;temp_s=s;end;end;end;end;for i=1:mfor j=1:nif(img(i,j,1)>temp_s)img(i,j,1)=255;img(i,j,2)=255;img(i,j,3)=255;elseimg(i,j,1)=0;img(i,j,2)=0;img(i,j,3)=0;end;end;end;figure(2);imshow(img);。