0

您能否建议我如何在 Matlab 中通过重建实现形态闭合? 据我所知,imreconstruct命令可用于通过重建实现开放(在我的重建开放代码下方)。
在此处输入图像描述

img = rgb2gray(imread("input.jpg"));
img = imcomplement(img);
se=strel("square", 40);
marker= imerode(img,se);
mask=img;
opn_recon=imreconstruct(marker,mask);

以下是我为关闭重建编写的代码:

%Closing by reconstruction
img = rgb2gray(imread("input.jpg"));
img = imcomplement(img);
se=strel("square", 40);
marker= imdilate(img,se);
tmp=0;

while 1
  marker_loop = marker;
  geodesic=max(marker_loop,img);
  recon=imerode(geodesic,se); 
  if isequal(recon,tmp)==1
    break
  end
  tmp = recon;
  marker = imdilate(marker_loop,se);

end

但是代码不能正常工作。你能告诉我我的错误是什么,所以我可以解决它吗?

4

1 回答 1

2

imreconstruct应用 inf 重构,这可以解释为由第二张图像 ( mask) 条件下的重复膨胀。因为它是膨胀,它可以在结构侵蚀后应用以形成开口(通过重建打开)。

要通过重构形成闭合,我们需要先应用膨胀,然后再进行 sup-reconstruction。sup-reconstruction 是 inf-reconstruction 的对偶,因此可以解释为以第二个图像为条件的重复侵蚀。作为对偶,我们可以通过反转图像,应用操作,然后反转结果来根据 ind-reconstruction 实现 sup-reconstruction:

out = imcomplement(imreconstruct(imcomplement(marker), imcomplement(mask)));

因此,通过重建关闭是:

img = imread('cameraman.tif');
se = strel('square', 40);
marker = imdilate(img,se);
mask = img;
cls_recon = imcomplement(imreconstruct(imcomplement(marker), imcomplement(mask)));
于 2020-06-03T14:01:58.693 回答