形态开放通过重建matlab代码

时间:2016-06-02 12:02:54

标签: image matlab image-processing mathematical-morphology

我应该通过我自己的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;

有没有人有更好的代码或可以编辑我的代码?请帮我。 提前谢谢。

1 个答案:

答案 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倍),但我不太了解它。