Bor*_*New 10 matlab graph-theory image-processing 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
Run Code Online (Sandbox Code Playgroud)
对于图形切割,我使用了文件交换中的算法
例如,我可以定义
Cs=-log([y x])
Ct=-log([y1 x1])
Run Code Online (Sandbox Code Playgroud)
但问题是如何组合成本函数的信息,如代码源的这一部分
u = double((Cs-Ct) >= 0);
ps = min(Cs, Ct);
pt = ps
Run Code Online (Sandbox Code Playgroud)
它将超过矩阵大小
我不熟悉你链接到的FEX的图形切割实现,
但我将展示一个使用GCMexmatlab包装器的例子(正确的披露:我实现了这个包装器).
假设你已经尺寸的图像size(S)与n像素和K一个稀疏大小的矩阵n-by- n与K(ii,jj)表示如何ii和jj像素连接(对于相邻的ii和jj).
此外,您有一个u前景像素的掩码和一个v背景像素的掩码被视为硬约束.
首先,使用u和构造数据术语v:
Dc = 1000*[u(:), v(:)]; %// assign very large cost for picking FG pixel to label zero and vice versa
Run Code Online (Sandbox Code Playgroud)
正如您所看到的那样,数据项Dc是is n-2数组,l其中ii存储了为像素分配标签(0或1)的成本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');
Run Code Online (Sandbox Code Playgroud)
请注意,在要使用的GCMexrder中,您需要按照安装说明进行操作并对其进行编译才能使用.