1

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

有没有人更好的代码或可以编辑我的代码?请帮我。先感谢您。

4

1 回答 1

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 倍),但我对它的了解不足以解释它。

于 2016-06-02T16:43:12.217 回答