使用带有种子点的图切割进行图像分割

时间:2016-03-19 07:21:07

标签: matlab image-processing graph-theory image-segmentation max-flow

我正在进行医学图像分割,我想将模糊连通性算法与图形切割相结合,其思路是将图像与模糊连通性分割为背景,前景将用作图形切割的接收器和源算法,这是我的代码,用于获取图形切割分割的种子坐标

FC=afc(S,K); %// Absolute FC
u=FC>thresh;
v=FC<thresh;

s=regionprops(u, 'PixelIdxList'); %// listes de pixels de l´objet
t=regionprops(v, 'PixelIdxList'); %// listes de pixels de l´arrière plan
[a,b]=size(s);
[w,c,z]= size(t)

for i=1:a
    for j=1:b
        [y,x] = ind2sub(size(u), s(i,j).PixelIdxList);
    end
end
for k=1:w
    for d=1:c
        [y1,x1] = ind2sub(size(v), t(k,d).PixelIdxList);
    end
end

对于图形切割,我使用了File Exchange

中的算法

例如,我可以定义

Cs=-log([y x])
Ct=-log([y1 x1])

但问题是如何组合成本函数中的信息,如代码源的这一部分

u = double((Cs-Ct) >= 0);
ps = min(Cs, Ct);
pt = ps

它将超过矩阵大小

1 个答案:

答案 0 :(得分:6)

我不熟悉您链接到的FEX的图表切割实现,
但是我将使用GCMex matlab wrapper显示一个示例(正确披露:我实现了这个包装器)。

假设您的图片大小为size(S),其中n像素为K 稀疏矩阵,大小为n - by - {{ 1}} n代表K(ii,jj)ii像素的连接效果(相邻的jjii)。
此外,您有前景像素的掩码jj和背景像素的掩码u,可视为硬约束。

首先,使用vu构建数据术语:

v

正如您可以看到数据术语Dc = 1000*[u(:), v(:)]; %// assign very large cost for picking FG pixel to label zero and vice versa ,是Dc - by-2数组,其成本是将标签n(0或1)分配给像素{{1存储在l中。因此,对于前景中的像素(ii为1),分配标签Dc(ii,l+1)(即背景),您支付的费用为1000.背景中的像素也是如此(u(ii)为1 )将它们分配给前台(即l=0 = 1)是成本1000.因此,数据项v(ii)给种子像素(前景或背景)获得错误标签的成本非常高。

构建图形切割对象

l

请注意,在使用GCMex的rder中,您需要按照安装说明进行编译并对其进行编译才能正常工作。