我想在 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
在提到的示例中应该是我的结构元素?
答案 0 :(得分: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),但在现实生活中,你可能会接受一些不同的差异。