1

我想在matlab中编写一个简单的二进制重建算法。到目前为止,我知道这个算法是在开口之后使用的,以恢复连接到开口的原始图像片段。我还发现它可以删除与较大对象不相交的小区域,而不会扭曲大对象的小特征。

这是伪代码:

1. J = I o Z; %open input image with some structre element
2. T = J;
3. J = J  Z(k) % Dilate J with Z(k). this is my first problems. if Z in first line is structure element, then what is Z(k)?
4. J = I AND J % my second problem. how to AND these two on matlab.
5. if J ~= T go to 2.
6. else stop and J is the reconstructed image.

假设我们有这个图像作为输入:

输入图像

重建后的图像如下:

重建图像

使用上面提到的代码,到目前为止,我已经写了:

img = imread ('Input.jpg');
img = im2bw(img, 0.8);
J = bwmorph(img,'open');
T = J;
J = bwmorph(J, 'dilate');

我的问题是如何在 MATLAB 中正确结束。

我的第二个问题是我是否要使用imdilate而不是bwmorph在提到的示例中应该是我的结构元素?

4

1 回答 1

1

根据上面的评论,你会想要做这样的事情:

img = imread ('Input.jpg');
img = im2bw(img, 0.8);
J = bwmorph(img,'open');
THRESH = 0;
while (1)
    T = J;
    J = bwmorph(J, 'dilate');
    J = img & J;
    if (sum(T(:) - J(:)) <= THRESH)
        break;
    end
end

根据伪代码,您可以设置 THRESH = 0(即 T = J),但在现实生活中,您可能会接受一些小的差异。

于 2013-06-26T11:38:36.440 回答