过分割后处理——区域融合 ( Region Merging)

github
分水岭算法对噪声比较敏感,容易出现过分割。常见的处理过分割的方法包括:
1). 预处理,图像降噪;
2). 应用标记 (marker)。选择标记需要用户的参与,图像结构的先验知识;
3). 区域融合
本篇博客介绍,基于区域近邻图(RegionAdjacency Graph ,RAG)融合的过分割后处理方法。
此方法依赖于已分割的区域个数和噪声方差,个数越多效果越差,处理时间越长。最糟的情况是每个像素为1个区域。因而,为了减少分水岭分割的个数,需要对图像先降噪,再分水岭分割,最后区域融合

相似度计算

相似度用来判断两个邻近区域是不是应该融合。区域就是初始分割后,属于同一标记的像素集合。
K个区域的RAG, 表示为G=(V,E),其中顶点集 V = 1 , 2... , K ,对应的边集合 E V × V 。每个顶点节点代表一个区域,边表示和邻近区域相连,边权重就是两个区域之间的相似度,如图所示:
RAG
很自然的我们会想到用两个邻近区域的均值的距离来衡量相似性,距离越小越相似,不相邻的区域我们直接令相似度为无穷大。但是不同区域的个数不同,对于较小的区域我们倾向于将它和近邻融合,因而我们将区域的个数的信息作为权重来调整相似度。
因此相似度的计算方式定义如下:

δ ( R M i , R M j ) = | | R M i | | | | R M j | | | | R M i | | + | | R M j | | [ μ ( R M i ) μ ( R M j ) ] 2 I ( i , j )

I ( i , j ) = { 1 , i f R M i , R M j i s a d j a c e n t + , o t h e r w i s e .

R M = { R M 1 , R M 2 , . . . , R M M } 表示图像Y的M个区域集合。 R M k = { p k , 1 , p k , 2 , . . . , p k , | | R M k | | } 是第k个区域 R M k 的样本集。 | | R | | 表示集合的基数,有限集的基数(cardinality )就是传统概念下的“个数”。 μ ( R M k ) 是每部分的均值:
μ ( R M k ) = 1 | | R M k | | i = 1 | | R M k | | Y ( p k , i )

最后的分割个数n由 δ ( ) 决定,如果 δ 小于某个阈值则迭代终止。阈值可以根据噪声分布来确定。

算法流程

输入:K部分的RAG,K-RAG

迭代 util m i n ( δ ) >= T r e s h o l d

  1. (K-i)-RAG的边集合中找到最相似的边( δ 最小)
  2. 融合最相似边对应的两个区域顶点,得到(K-i-1)-RAG
  3. 更新顶点和边集合

输出:(K-n)-RAG

实例

处理步骤:
1. 对输入图像进行平滑滤波
2. 求梯度图像,对梯度进行阈值
3. 分水岭分割
4. 区域融合

对此算法来说,梯度图像的阈值,影响着区域融合的效果和计算时间。更大的阈值意味着分水岭分割后区域个数越少,计算速度越快。但是过大的阈值会丢失边缘轮廓。

% 读取图像
I=imread('cameraman.tif');
% 估计图像的噪声方差
varn=EstimaOfNoise(I);
% 图像平滑,目的是减少较小的尺寸区域
h=fspecial('average',[3 3]);
SI=imfilter(I,h);
figure,imshow(SI);title('smoothed Image');
% 求梯度图像
h1=[-1,0,1];
h2=h1';
Ix=imfilter(double(SI),h1,'replicate');
Iy=imfilter(double(SI),h2,'replicate');
gradmag = sqrt(Ix.^2 + Iy.^2);%求模
figure,imshow(gradmag./max(gradmag(:)));title('gradient Image');
% candidate egde pixels which is regional maxima 
CanI=imregionalmax(gradmag)
% 调整梯度图像,只平滑非candidate egde pixels
h=fspecial('average',[3 3]);
Gs=imfilter(gradmag,h);
Gs(CanI~=0)=gradmag(CanI~=0);
% 阈值梯度图像
bw=zeros(size(I));
T=10*sqrt(varn);
bw(Gs>T)=gradmag(Gs>T);
figure,imshow(bw);title('bw')
% 分水岭分割
label=watershed(bw);
RGBLabel=label2rgb(label);
figure,imshow(RGBLabel);
title(' watershed with treshold Image of gradient Image');
% 基于最近邻图的区域融合
Rlabel=RegionMerging(I,label,1000,2);
RGBRlabel=label2rgb(Rlabel);
figure,imshow(RGBRlabel);title('watershed segment after RegionMerging');

初始分水岭分割结果如图所示
步骤1初始分水岭分割结果

区域融合后的结果如图所示

参考文献

[1]. Haris K, Efstratiadis S N, Maglaveras N, et al. Hybrid image segmentation using watersheds and fast region merging.[J]. IEEE Transactions on Image Processing A Publication of the IEEE Signal Processing Society, 1998, 7(12):1684-1699.

猜你喜欢

转载自blog.csdn.net/qq_19531479/article/details/79649227