10

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

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

它将超过矩阵大小

4

1 回答 1

6

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

假设您有一个大小size(S)n像素的图像和K一个大小为-by-的稀疏矩阵,表示像素和像素的连接程度(对于相邻的和)。 此外,您有一个前景像素掩码和一个背景像素掩码,将被视为硬约束。nnK(ii,jj)iijjiijj
uv

u首先,使用和构造数据项v

Dc = 1000*[u(:), v(:)]; %// assign very large cost for picking FG pixel to label zero and vice versa

正如您所看到的 data-term Dc,是nx2 数组,将标签l(0 或 1)分配给像素的成本ii存储在Dc(ii,l+1). 因此,对于前景中的像素(u(ii)为 1)分配标签l=0(即背景),您支付的成本是 1000。对于背景中的像素(v(ii)为 1)分配它们到前景(即l=1)也是成本 1000。因此,数据项Dc为获得错误标签的种子像素(前景或背景)带来了非常高的成本。

构造一个切图对象

gch = GraphCut('open'), Dc, [0 1; 1 0], K );
[gch L] = GraphCut('expand',gch);
gch = GraphCut('close',gch);
L = reshape(L, size(u)); 
figure; imshow(L,[]); title('the resulting mask');

请注意,要使用它,GCMex您需要按照安装说明进行编译以使其工作。

于 2016-04-21T12:27:05.580 回答