我应该通过我自己的Matlab代码重建而不是imreconstruct
进行形态学开放。这是我的代码,但效果不好:
S = input('Enter the structuring element: ');
Im = input('Enter the input image: ');
marker = imerode(Im,S);
mask = Im;
Im2 = imdilate(marker,S);
Im3 = min(Im2,Im);
i=1;
while Im3(i+1)~= Im3(i)
i=i+1;
Im2 = imdilate(Im3(i),S);
Im3(i+1) = min(Im2,Im);
end
imrecon = Im3;
有没有人有更好的代码或可以编辑我的代码?请帮我。 提前谢谢。
答案 0 :(得分:0)
我不了解MatLab,但您的代码似乎是正确的。但要小心,你必须检查用户是否给出了一个统一的结构元素(最大3x3维度)。
以下是重建开放的经典伪代码:
Input: Image, Marker, SE (unitary, 3x3 maximum)
Var: Reconstructed, Dilated
Output: Result
Reconstructed <-- Marker
while Reconstructed != Result
Result <-- Reconstructed
Dilated <-- Dilate(Result, SE)
Reconstructed <-- Minimum(Image, Dilated)
这是学术方法,但绝对不是最快的。更快的方法是使用分层等待队列(HQ)来实现它。您将标记像素输入到HQ中,然后按照以前的方式逐个处理:扩张加最小值。使用HQ,每个像素仅处理一次。我所知道的最快的实现方法是使用Down Hill算法(在Java中快3倍,在c / C ++中高达20倍),但我不太了解它。