Matlab中的形态学重构闭合

Matlab中的形态学重构闭合,matlab,image-processing,image-morphology,mathematical-morphology,Matlab,Image Processing,Image Morphology,Mathematical Morphology,您能告诉我如何在Matlab中通过重构实现形态学闭合吗? 据我所知,imrecostructure命令可用于实现逐重建打开(以下是我的逐重建打开代码) 下面是我为结束重建而编写的代码: %Closing by reconstruction img = rgb2gray(imread("input.jpg")); img = imcomplement(img); se=strel("square", 40); marker= imdilate(img,se); tmp=0; while 1

您能告诉我如何在Matlab中通过重构实现形态学闭合吗?

据我所知,imrecostructure命令可用于实现逐重建打开(以下是我的逐重建打开代码)

下面是我为结束重建而编写的代码:

%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

但代码不能正常工作。你能告诉我我出了什么错,这样我就可以改正了吗

imrecostruct
应用inf重建,可以将其解释为第二个图像(
掩模
)条件下的重复扩张。因为它是一种扩张,所以可以在结构侵蚀后应用,形成一个开口(通过重建开口)

为了通过重建形成闭合,我们需要先进行扩张,然后进行sup重建。sup重建是inf重建的双重,因此可以解释为第二幅图像所调节的重复侵蚀。作为对偶,我们可以通过反转图像,应用运算,然后反转结果,在ind重建方面实现sup重建:

out=imcomplete(imrecostructure(imcomplete(marker),imcomplete(mask));
因此,通过重建实现的关闭是:

img=imread('cameran.tif');
se=strel('square',40);
标记物=img扩张(img,se);
掩码=img;
cls_recon=imcomplete(imreconstruct)(imcomplete(marker),imcomplete(mask));

imrecostruct
应用inf重建,可以将其解释为第二个图像(
掩模
)条件下的重复扩张。因为它是一种扩张,所以可以在结构侵蚀后应用,形成一个开口(通过重建开口)

为了通过重建形成闭合,我们需要先进行扩张,然后进行sup重建。sup重建是inf重建的双重,因此可以解释为第二幅图像所调节的重复侵蚀。作为对偶,我们可以通过反转图像,应用运算,然后反转结果,在ind重建方面实现sup重建:

out=imcomplete(imrecostructure(imcomplete(marker),imcomplete(mask));
因此,通过重建实现的关闭是:

img=imread('cameran.tif');
se=strel('square',40);
标记物=img扩张(img,se);
掩码=img;
cls_recon=imcomplete(imreconstruct)(imcomplete(marker),imcomplete(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