通过 Matlab 中的重建进行形态学闭合

Morphological closing by reconstructions in Matlab

请问如何在 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

但是代码无法正常运行。你能告诉我我的错误是什么,所以我可以解决它吗?

imreconstruct 应用 inf 重建,这可以解释为由第二张图像 (mask) 调节的重复扩张。因为是dilation,所以可以在结构侵蚀后应用,形成开口(opening by 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)));