2

我正在加厚二进制图像。我希望将标签 n 像素扩展到每个方向。

原图:

原始标签图像

起初我使用函数 bwmorph(I, 'thicken', 25) 并得到这个图像:

形态增厚后

这不好。加厚似乎使用了结构元素 [0,1,0;1,1,1;0,1,0],因此它总是将圆形转换为菱形。imdilate 与提到的结构元素会产生相同的输出。

接下来,我尝试使用结构元素 [1,1,1; 迭代扩展原始图像 n=25 次;1,1,1; 1,1,1]并得到以下图像:

迭代膨胀

原来的形状现在完全消失了。

我知道扩张总是会在某种程度上扭曲边界。我尝试了结构元素“磁盘”(r=5,膨胀 5 次)并得到了相当不错的结果:

在此处输入图像描述

这是最好的吗?如果我希望尽可能地保留原始圆形形状,我应该选择哪个结构元素?是否有任何好的经验法则可以为特定的膨胀距离找到合适的尺寸(可以从 10 到 100 不等,标签从圆形到椭圆形不等)?在尝试保持原始形状的同时,是否有更好的方法可以在所有方向上增长二进制图像?

有没有办法保持欧拉特性 - 保持增稠质量,同时将结构元素更改为更合适的东西?

4

2 回答 2

3

试试这个:

bw = imread('bw.png');
figure; imshow(imdilate(bw, strel('arbitrary', bw)))

我正在使用图像本身来扩展它。它提供了更保形的增长:

更新:正如@Tapio 所说,可以使用以下方法轻松调整调整大小imresize

 figure; imshow(imdilate(bw, strel('arbitrary', imresize(bw, 0.5))))

具有以下输出:

在此处输入图像描述

于 2016-08-16T15:28:42.193 回答
1

如果您只使用单一结构元素,那么您将始终面临您所描述的问题。如果你想用大小为 N 的结构元素来扩张形状,不要使用大小为 1 的结构元素的 N 倍,否则你会得到意想不到的美丽变形。

如果要进行大小为 N 的膨胀,请尝试使用半径为 N 的磁盘。但是,处理时间会长得多。

另一种解决方案是使用距离图:形状是种子(距离 0),然后距离小于 N 的所有内容都是您的结果。这将非常类似于大小 N 的膨胀。

于 2016-08-16T19:57:01.627 回答