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

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

相似度计算

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

δ(RiM,RjM)=||RiM||||RjM||||RiM||+||RjM||[μ(RiM)μ(RjM)]2I(i,j) δ ( 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,+,ifRiM,RjMisadjacentotherwise. 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 .

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

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

算法流程

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

迭代 util min(δ)>=Treshold 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');

初始分水岭分割结果如图所示
过分割后处理——区域融合 ( Region Merging)_第2张图片

区域融合后的结果如图所示
过分割后处理——区域融合 ( Region Merging)_第3张图片

参考文献

[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.

你可能感兴趣的:(matlab,图像处理)