数字图像处理第十章 图像分割


从前一章开始,所介绍的内容就从输入和输出都是图像的图像处理方法,转到了输入是图像而输出是从这些图像中提取出来的属性的图像处理方法。分割是该方向的一个主要步骤。分割将图像细分为构成它的子区域或物体。细分的程度取决于要解决的问题。也就是说,在应用中,当感兴趣的物体或区域已经被检测出来时,就停止分割。

本章中的多数分割算法均基于灰度值的两个基本性质之一:不连续性和相似性。对于不连续的灰度,方法是以灰度突变为基础分割的一幅图像,比如图像的边缘。对于相似的灰度,主要方法是根据一组预定义的准则把一幅图像分割为相似的区域。

1 基础知识

令R表示一幅图像占据的整个空间区域。我们可以将图像分割视为把R分为n个子区域R1,R2,…Rn的过程,满足:

1)R1到Rn的并集等于R。
2)Ri是一个连通集,i=1,2,…,n。
3)R1到Rn中任意两个区域的交集都为空集。
4)Q(Ri)=TRUE,i=1,2,…,n。
5)Q(Ri∪Rj)=FALSE,对于任何Ri和Rj的邻接区域。

其中,Q(Rk)是定义在Rk的点上的一个逻辑断言,若Ri和Rj的并集形成一个连通集,则我们说这两个区域是邻接的。条件1指出,分割必须是完全的,也就是说,每个像素都必须在一个区域内。条件2要求一个区域中的点以某些预定义的方式来连接。条件3指出,各个区域必须是不相交的。条件4涉及分割后的区域中的像素必须满足的属性——例如,若Ri中的所有像素都有相同的灰度级,则Q(Ri)=TRUE。最后,条件5指出,两个邻接区域Ri和Rj在属性Q的意义上必须是不同的。

2 点、线和边缘检测

在这一节,我们讨论在数字图像中检测亮度不连续的三种基本类型:点、线和边缘。寻找不连续的最常见方法是在空间域中对整幅图像运用模板。

2.1 点检测

嵌在一幅图像恒定区域或亮度几乎不变的区域里的孤立点的检测,在原理上都是比较简单的,我们使用下图模板,如果在模板位置|R|≥T,T是非负的阈值,我们就说孤立的点被检测出来了。
在这里插入图片描述

>> f = imread('FigP0918.tif');
>> w = [-1 -1 -1; -1 8 -1; -1 -1 -1];
>> g = abs(imfilter(tofloat(f), w));
>> T = max(g(:));
>> g = g >= T;
>> subplot(1,2,1),imshow(f),title('Original Image');
>> subplot(1,2,2),imshow(g,[]),title('Point Search');

在这里插入图片描述

2.2 线检测

更复杂一点的是线检测,对于下图四个模板在图像上移动,就会对四个方向上的直线的响应更强烈。对于恒定的背景,当线通过模板的中间一行时可能产生更大的响应。
在这里插入图片描述
如果我们对图像中所有由给定模板定义的方向的线感兴趣,可以简单地通过图像运行这些模板,并对结果的绝对值取阈值,留下来的点便是响应最强烈的那些点,这些点与模板定义的方向最接近,并且线只有一个像素宽。下面检测指定方向的线:

f = imread('Fig0905(a).tif');     
w = [2 -1 -1;-1 2 -1;-1 -1 2];          
g = imfilter(double(f),w);
gtop = g(1:120,1:120);                 
gtop = pixeldup(gtop,4);                
gbot = g(end-119:end,end-119:end);     
gbot = pixeldup(gbot,4);
g1 = abs(g);                             
T = max(g1(:));
g2 = g1>=T;

subplot(3,2,1);imshow(f);title('(a)Original');
subplot(3,2,2);imshow(g,[]);title('(b)Result Of +45°');
subplot(3,2,3);imshow(gtop,[]);title('(c)');
subplot(3,2,4);imshow(gbot,[]);title('(d)');
subplot(3,2,5);imshow(g1,[]);title('(e)Absolute Of B');
subplot(3,2,6);imshow(g2);title('(f)Point which g>=T');

在这里插入图片描述
图C是B中左下角的放大效果,图D是B中右下角的放大效果。在图D中,直线部分要比图C中的线段亮的多。原因是:图A中右下方部分只有一个像素款,但左下方不是。模板的响应对一个像素宽的部分比较强烈。

2.3 边缘检测

在边缘处,灰度和结构等信息产生突变,边缘是一个区域的结束,也是另一个区域的开始,利用该特征可以分割图像。

由于图像数据是二维的,而实际物体是三维的,从三维到二维的投影必然会造成信息的丢失,再加上成像过程中光照的不均和噪声等因素的影响,使得有边缘的地方不一定能被检测出来,而检测出来的边缘也不一定代表实际边缘。

图像的边缘有方向和幅度两个属性,沿边缘方向像素变化平缓,垂直于边缘方向像素变化剧烈。边缘上的这种变化可以用微分算子检测出来,通常用一阶或二阶导数来检测边缘。
在这里插入图片描述
斜坡部分与边缘的模糊程度成正比。
在这里插入图片描述
一阶导数可以用于检测图像中的一个点是否在斜坡上。二阶导数的符号可以用于判断一个边缘像素是在边缘亮的一边还是暗的一边。(1)对图像中的每条边缘二阶导数生成两个值(2)一条连接二阶导数正极值和负极值的虚构直线将在边缘中点附近穿过零点,据此可以用于确定粗边线的中心。(如上图)二阶导数正数表示暗,负数表示亮。

基于一阶导数的边缘检测算子包括 Roberts 算子、Sobel 算子、Prewitt 算子等。通过 2X2 或者 3X3 的模板作为核与图像中的每个像素点做卷积和运算,然后选取合适的阈值以提取边缘。

梯度算子
在这里插入图片描述
在数字图像处理中一般用差分来替代微分,所以会有更快的计算效率。

Roberts边缘检测算子
在这里插入图片描述
上图右边两个称为Roberts交叉梯度算子,其中:
Gx = Z9 - Z5
Gy = Z8 - Z6

Prewitt边缘检测算子
在这里插入图片描述
上面两个模板用于计算水平和垂直方向微分来检测边缘,其中
Gx = (Z7 + Z8 + Z9) - (Z1 + Z2 + Z3)
Gy = (Z3 + Z6 + Z9) - (Z1 + Z4 + Z7)

Sobel算子
在这里插入图片描述
Sobel算子比起上面的Prewitt算子考虑到了不同像素点的权值,其中
Gx = (Z7 + 2Z8 + Z9) - (Z1 + 2Z2 + Z3)
Gy = (Z3 + 2Z6 + Z9) - (Z1 + 2Z4 + Z7)

上面Sobel算子和Prewitt算子仅仅是水平和垂直方向上的,实质上两种算子也有用于对角检测的:
在这里插入图片描述
拉普拉斯算子
在这里插入图片描述
两种常见的拉普拉斯算子模板:
在这里插入图片描述
拉普拉斯算子一般不以其原始形式用于边缘检测,这是因为:作为一个二阶导数,拉普拉斯算子对噪声具有无法接受的敏感性;拉普拉斯算子的幅值产生双边缘,这是复杂的分割不希望有的结果;拉普拉斯算子不能检测边缘的方向。

拉普拉斯算子在分割中起的作用包括:利用它的零交叉的性质进行边缘定位和确定一个像素是在边缘暗的一边还是亮的一边。

算子比较

Roberts算子:Roberts算子利用局部差分算子寻找边缘,边缘定位精度较高,但容易丢失一部分边缘,同时由于图像没经过平滑处理,因此不具备抑制噪声的能力。该算子对具有陡峭边缘且含噪声少的图像效果较好。

Sobel算子和Prewitt算子:都是对图像先做加权平滑处理,然后再做微分运算,所不同的是平滑部分的权值有些差异,因此对噪声具有一定的抑制能力,但不能完全排除检测结果中出现的虚假边缘。虽然这两个算子边缘定位效果不错,但检测出的边缘容易出现多像素宽度。

Laplacian算子:是不依赖于边缘方向的二阶微分算子算子,对图像中的阶跃型边缘点定位准确,该算子对噪声非常敏感,它使噪声成分得到加强,这两个特性使得该算子容易丢失一部分边缘的方向信息,造成一些不连续的检测边缘,同时抗噪声能力比较差。

这里的大多数算子我们都在前面空间滤波中实现并且看到效果了,这里就不编码实现了。

3 使用霍夫变换的线检测

在理想情况下,上一小节讨论的方法应该只产生位于边缘上的像素。实际上,得到的像素因为噪声,以及不均匀照明引起的边缘断裂和杂散的亮度不连续而难以得到完全的边缘特性。

因而,典型的边缘检测算法紧接着用连接过程把像素组装成有意义的边缘。一种寻找并连接图像中线段的方法是霍夫变换。

霍夫变换的理论在这里:https://blog.csdn.net/weixin_40196271/article/details/83346442

图像处理工具箱中提供了三个与或复变有关的函数。函数hough实现了霍夫变换理论的概念,函数houghpeaks寻找霍夫变换的峰值(累加单元的高计数),函数houghlines以来自其它两个函数的结果为基础在原始图像中提取线段。

3.1 函数hough

霍夫变换的说明:

f = zeros(101, 101);  
f(1, 1) = 1; f(101, 1) = 1; f(1, 101) = 1;  
f(101, 101) = 1; f(51, 51) = 1; 
H = hough(f);subplot(1,2,1),imshow(H,[]),title('Hough Transfer');
[H, theta, rho] = hough(f);  
subplot(1,2,2),imshow(H, [], 'XData', theta, 'YData', rho ,'InitialMagnification', 'fit'),title('Hough Transfer With Axis')  
axis on, axis normal  
xlabel('\theta'), ylabel('\rho')

在这里插入图片描述
上图中,三条曲线在正负45度处的交点指出:f中有两组三个共线的点。两条曲线在( ρ \rho , θ \theta )=(0,-90)、(-100,-90)、(0,0)和(100,0)处的交点指出:有4组位于垂直线和水平线上的共线点。

3.2 函数houghpeaks和函数houghlines

用霍夫变换检测和连接线

f = imread('Fig1025(a).tif');
thresh = graythresh(f);
f = im2bw(f,thresh);
[H, theta, rho] = hough(f, 'ThetaResolution', 0.2);  
imshow(H, [], 'XData', theta, 'YData', rho, 'InitialMagnification', 'fit') 
axis on, axis normal  
xlabel('\theta'), ylabel('\rho') 
peaks = houghpeaks(H, 5);  
hold on  
plot(theta(peaks(:, 2)), rho(peaks(:, 1)), ...  
         'linestyle', 'none', 'marker', 's', 'color', 'w');title('(a)Hough Transfer With Max Value');  
lines = houghlines(f, theta, rho, peaks);  
figure, imshow(f), hold on  
for k = 1:length(lines)  
xy = [lines(k).point1 ; lines(k).point2];  
plot(xy(:,1), xy(:,2), 'LineWidth', 4, 'Color', [.8 .8 .8]); title('(b)Line Which Work Out By Hough ');   
end

在这里插入图片描述
在这里插入图片描述

4 阈值处理

4.1 基本原理

假设图像的中灰度直方图对应于暗背景上有亮物体组成的图像f(x,y),这样,目标和背景像素拥有的灰度级可分为两个占主导地位的模式。从背景提取目标的很显然方法是选取阈值T来分离这两个模式。然后f(x,y)≥T的任何图像点被称为物体点,其他的点称为背景点(反过来,在亮背景上的暗物体也是一样)。阈值处理后的图像g(x,y)被定义为:
在这里插入图片描述
在这里对象点不需要值一定为1,背景点一定为0。在这里插入图片描述
如果灰度级有几层也可以选择多阈值去分割图像,但多余两个阈值的分割是很难解决的(常常是不可能的),并且好的结果通常使用其他方法得到。

4.2 基本全局阈值处理

通常,在图像处理中首选的方法是使用一种能基于图像数据自动地选择阈值算法,为了自动选阈值,下列迭代过程采用的就是这样的方法:
1)针对全局阈值选择初始估计T。
2)用T分割图像。这会产生两组像素:G1有所有灰度值大于T的像素组成,G2由所有灰度值小于等于T的像素组成。
3)分别计算G1、G2区域内的平均灰度值m1和m2
4)计算出新的阈值: T = 1 2 ( m 1 + m 2 ) T=\frac{1}{2}(m_1+m_2)
5)重复步骤(2)到(4),直到在连续的重复中,T的差异比预先设定的参数△T小为止。
6)使用函数im2bw分割图像。

计算全局阈值:

f = rgb2gray(imread('raccoon.jpg'));    
count=0;
T=mean2(f);
done=false;
while ~done
 count=count+1;
 g=f>T;
 Tnext=0.5*(mean(f(g))+mean(f(~g)));
 done=abs(T-Tnext)<0.5;
 T=Tnext;
end 
g=im2bw(f,T/255);subplot(1,3,1);imshow(f);title('(a)Original Image');
subplot(1,3,2);imhist(f);title('(b)Hist Of A');
subplot(1,3,3);imshow(g,[]);title('(c)Result');

在这里插入图片描述

4.3 使用Otsu’s方法的最佳全局阈值处理

Otsu算法:选择初始阈值将图像分为前景像素和背景像素,计算二者方差,然后定义类间方差,不断调整阈值,使二者方差的差越来越大,差越大代表区分程度越好。

对Otsu算法和基本全局阈值处理方法分割图像的比较:

f = rgb2gray(imread('raccoon.jpg'));    
count=0;
T=mean2(f);
done=false;
while ~done
 count=count+1;
 g=f>T;
 Tnext=0.5*(mean(f(g))+mean(f(~g)));
 done=abs(T-Tnext)<0.5;
 T=Tnext;
end
g=im2bw(f,T/255);
[T, SM] = graythresh(f);
 g1 = im2bw(f, T); 
subplot(2,2,1);imshow(f);title('(a)Original Image');
subplot(2,2,2);imhist(f);title('(b)Hist of A');
subplot(2,2,3);imshow(g);title('(c)Result Of Global');
subplot(2,2,4);imshow(g1);title('(d)Reuslt Of Otsu ');

在这里插入图片描述

4.4 使用图像平滑改进全局阈值处理

噪声可以把简单的阈值处理转变为不能处理的问题。当噪声不能再源头减少,并且阈值处理是选择的分割方法,提高性能的一种常用技术是在阈值处理之前先对图像平滑。我们通过下面例子可以看出来:

f = imread('Fig1036(c).tif');    
fn = imnoise(f,'gaussian',0,0.038);
subplot(2,3,1),imshow(fn);title('(a) Image With Noise');
subplot(2,3,2),imhist(fn);title('(b) Hist Of A');
Tn = graythresh(fn);
gn = im2bw(fn,Tn);
subplot(2,3,3),imshow(gn);title('(c)Result Of Otsu With Noise');
w = fspecial('average',5);
fa = imfilter(fn,w,'replicate');
subplot(2,3,4),imshow(fa);title('(d)Image After Smoothing');
subplot(2,3,5),imhist(fa);title('(e) Hist Of D');
Ta = graythresh(fa);
ga = im2bw(fa,Ta);
subplot(2,3,6),imshow(ga);title('(f)Result Of Otsu After Smoothing');

在这里插入图片描述

4.5 使用边缘改进全局阈值处理

基于前面4节的实验结果,我们得出以下结论:如果直方图的峰是高的、窄的、对称的,并且由深的谷分开,那么选到好的阈值的机会就会增大。改进直方图的一种方法就是仅考虑那些位于或接近物体和背景间边缘的像素。比较直接和明显的改进是直方图不依赖物体和背景的相对大小。另外,位于物体上的任何像素的概率将近似等于位于背景上的像素的概率,这样就改进了直方图峰值的对称性。最后,正如下面内容指出的那样,满足某些基于梯度度量的像素在直方图的峰值之间有较深的谷。算法如下,其中f(x,y)是输入图像:
1)使用梯度或拉普拉斯算子计算f(x,y)的边缘图像。
2)指定阈值T。
3)用来自步骤2的阈值对来自步骤1的图像进行阈值处理,产生一幅二值图像gT(x,y)。这幅图像在步骤4中选择来自f(x,y)的对应于强边缘的像素并作为标记图像使用。
4)仅用f(x,y)中的像素计算直方图,gT(x,y)中1值像素的位置。
5)用来自步骤4中的直方图,通过全局阈值方法(如Otsu算法)来分割f(x,y)。

用拉普拉斯边缘信息改进全局阈值处理:

f = tofloat(imread('Fig1043(a).tif'));    
subplot(2,3,1),imshow(f);title('(a) Original Image');
hf = imhist(f); subplot(2,3,2),imhist(f);title('(b) Hist Of A');
[Tf SMf] = graythresh(f); 
gf = im2bw(f, Tf); 
subplot(2,3,3),imshow(gf);title('(c) A Divided By graythresh');
w = [-1 -1 -1; -1 8 -1; -1 -1 -1]; 
lap = abs(imfilter(f, w, 'replicate')); 
lap = lap/max(lap(:)); 
h = imhist(lap);
Q = percentile2i(h, 0.995); 
markerImage = lap > Q; 
fp = f.*markerImage; 
subplot(2,3,4),imshow(fp);title('(d) Product Of Marked And Original Image');
hp = imhist(fp);
hp(1) = 0;
subplot(2,3,5),bar(hp,0) ;title('(e)Hist Of D With No Zero');
T = otsuthresh(hp);
g = im2bw(f, T); 
subplot(2,3,6),imshow(g);title('(f)Result Of Otsu');

在这里插入图片描述

4.6 基于局部统计的可变阈值处理

当背景照明高度不均匀时,有代表性的全局阈值处理就会失败。或者在有多个主要物体灰度的情况下(此时全局阈值处理有困难),进行补偿的一种方法是采用可变阈值处理。

对全局和局部阈值处理的比较

f = tofloat(imread('Fig1043(a).tif'));    
subplot(2,2,1),imshow(f);title('(a) Original Image');
[TGlobal] = graythresh(f); 
gGlobal = im2bw(f, TGlobal); 
subplot(2,2,2),imshow(gGlobal);title('(b) Segmented By Otsus');
g = localthresh(f, ones(3), 30, 1.5, 'global'); 
SIG = stdfilt(f, ones(3));
subplot(2,2,3), imshow(SIG, [ ]) ;title('(c) Local Standard Deviation Image');
subplot(2,2,4),imshow(g);title('(d) Segmented With Local Threshold ');
function mean = localmean( f, nhood )
if nargin == 1
    nhood = ones(3) / 9;
else
    nhood = nhood / sum(nhood(:));
end
mean = imfilter(tofloat(f), nhood, 'replicate');
end
function g = localthresh( f,nhood,a,b,meantype )
f = tofloat(f);
SIG = stdfilt(f, nhood);
if nargin ==5 && strcmp(meantype, 'global');
    MEAN = mean2(f);
else
    MEAN = localmean(f, nhood);
end
g = (f > a*SIG) & (f > b*MEAN);
end

在这里插入图片描述
从背景中分割出细胞来,并且从细胞的主体分出细胞核(内部的亮区域)。这幅图像中有三个主要的灰度级,因此有理由期待这样的分割是可能的。因为细胞核比细胞本身明显较亮,所以预期围绕细胞核边界的标准差相对较大,而围绕细胞边界的标准差稍微小一些。如图C所示,的确是这种情况。由此得出以下结论:在基于 局部标准差的函数localthresh中,这应该是很有帮助的。如图 D所示,运用了属性的分割是相当有效的。个别细胞已经从背景中分割出来了, 并且细胞核也被完全分割出来了。当背景接近于常数,并且所有物体的灰度高于或低于背景灰度时,选择全局均值一般会得到较好的结果。

5 基于区域的分割

分割的目的是把图像分成区域。在前面二到三小节,我们基于灰度级的不连续性来寻找区域间边界的方法,解决了这一问题。在四小节中,分割时基于像素特性(如灰度值)的分布,通过阈值处理得以完成。阈值分割法由于没有或很少考虑空间关系,使多阈值选择受到限制。基于区域的分割方法可以弥补这点不足,它利用的是图像的空间性质,该方法认为分割出来的属于同一区域的像素应具有相似的性质,其概念是相当直观的。传统的区域分割算法有区域生长法和区域分裂合并法。该类方法在没有先验知识可以利用时,对含有复杂场景或自然景物等先验知识不足的图像进行分割,也可以取得较好的性能。但是,空间和时间开销都比较大。这一小节讨论寻找区域的分割技术。

5.1 区域生长

区域生长是一种根据事前定义的准则将像素或子区域聚合成更大区域地过程。区域生长主要考虑像素及其空间邻域像素之间的关系开始时确定一个或多个像素点作为种子,然后按某种相似性准则增长区域,逐步生成具有某种均匀性的空间区域,将相邻的具有相似性质的像素或区域归并从而逐步增长区域,直至没有可以归并的点或其它小区域为止。区域内像素的相似性度量可以包括平均灰度值、纹理、颜色等信息。
在这里插入图片描述
生长准则:所考虑的像素点和种子点地灰度值地绝对值差小于或等于某个阈值 T,将该像素点归入种子点所在的区域。

区域生长步骤:
1)选择合适的种子点
2)确定相似性准则(生长准则)
3)确定生长停止条件

使用区域生长检测焊接空隙:

f = imread('Fig1051(a).tif');    
subplot(2,2,1),imshow(f);
title('(a)Original Image');
[g,NR,SI,TI]=regiongrow(f,1,0.26);
subplot(2,2,2),imshow(SI);
title('(b)Seed Point');
subplot(2,2,3),imshow(TI);
title('(c)Point After Screen');
subplot(2,2,4),imshow(g);
title('(d)The Result Of 8 Connectivity Analysis Of Seed Points');

在这里插入图片描述
图A显示了一幅包含几个裂缝(水平的暗区域)和空隙(穿过图像中部的、亮的、白色的 水平方向条纹)的 X射线焊接图像。望使用regiongrow函数来分割相应的焊接缺陷区域。这些被分割的区域可以用于自动检测这一任务。图B显示了种子点(图像 SI)。在这种情况下,种子点很多,因为种子被指定为在图 像中具有数值 225 的所有点(标定后是1)。图C是图像 TI,显示了所有通过阈值测试的点;也就是说,具有灰度 Zi且满足︱Zi –S︱≤T 的点。图D显示了提取图C中所有连接到种子点的像素的结果。这是分割后的图像 g。通过将这幅图像与原始图像进行比较,区域生长过程确实以合理的精确度分割了焊接的缺陷这一点是很明显的。

5.2 区域分离和聚合

区域分裂:如果区域的某些特性差别比较大,即不满足一致性准则时,则区域应该采用分裂法,分裂过程从从图像的最大区域开始,一般情况下,是从整幅图像开始。

注意:1)确定分裂准则(一致性准则)。2)确定分裂方法,即如何分裂区域,使得分裂后的子区域的特性尽可能都满足一致性准则值

算法:1)形成初始区域;2)对图像的每一个区域 Ri,计算 P(Ri),如果 P(Ri)=FALSE,则沿着某一合适的边界分裂区域;3)重复步骤(2),当没有区域需分裂时,算法结束。

区域合并:单纯的区域分裂只能把图像分成许多满足一致性谓词的区域,相邻的具有相同性质的区域并没有合成一体。1)合并运算就是把相邻的具有相似性质的区域合称为一个区域
2)合并算法中最重要的运算是确定两个区域的相似性3)评判区域相似性方法有许多,评判相似性的方法可以基于区域的灰度值,也可以基于边界的强弱性等因素。一种简单的方法是比较它们的灰度均值。

算法:1)使用某种方法进行图像的初始区域分割。2)对于图像中相邻的区域,计算是否满足一致性谓词,若满足则合并为一个区域。3)重复步骤(2),知道没有区域可以合并,算法结束。

区域分裂合并:区域分裂合并法无需预先指定种子点,它按某种一致性准则分裂或者合并区域。可以先进行分裂运算,然后再进行合并运算;也可以分裂和合并运算同时进行,经过连续的分裂和合并,最后得到图像的精确分割效果。
在这里插入图片描述
在这里插入图片描述
算法:
1)设整幅图像为初始区域;
2)对每个区域 R,如果 P®=FALSE,则把该区域分裂成四个子区域;
3)重复上一步,直到没有区域可以分裂;
4)对图像中任意两个相邻的 R1 和 R2,如果 P(R1UR2)=FALSE,则把这两个区域合并成一个区域;
5)重复上一步,直到没有相邻区域可以合并,算法结束。

使用了区域分离和合并的图像分割:

f = imread('D:\数字图像处理\第十章学习\Fig1023(a).tif');    
subplot(2,3,1),imshow(f);
title('(a)区域分割原始图像');
g64=splitmerge(f,64,@predicate);%64代表分割中允许最小的块
subplot(2,3,2),imshow(g64);
title('(b)mindim为64时的分割图像');
g32=splitmerge(f,32,@predicate);%32代表分割中允许最小的块
subplot(2,3,3),imshow(g32);
title('(c)mindim为32时的分割图像');
g16=splitmerge(f,16,@predicate);%16代表分割中允许最小的块
subplot(2,3,4),imshow(g16);
title('(d)mindim为16时的分割图像');
g8=splitmerge(f,8,@predicate);%8代表分割中允许最小的块
subplot(2,3,5),imshow(g8);
title('(e)mindim为8时的分割图像'); 
g4=splitmerge(f,4,@predicate);%4代表分割中允许最小的块
subplot(2,3,6),imshow(g4);
title('(f)mindim为4时的分割图像');

在这里插入图片描述
图 A显示了一幅天鹅星座环的 X 射线频段图像。图像的大小为 256×256 像素。该例的目的是分割出环绕致密中心的稀疏环。图 B到F显示了使用函数splitmerge且mindim的值分别等于 64、32、16、8、4 时分割图A的结果。所有图像均显示了边界的细节水平与 mindim 的值成反比的分割结果。图中的所有结果都是合理的分割。如果以除原始图像之外的这些图像之一作为模板提取感兴趣区域,图D的结果将是最好的选择,因为它是具有最多细节的实心区域。

猜你喜欢

转载自blog.csdn.net/weixin_42939683/article/details/107319093