从MATLAB中的4连接到8连接

时间:2011-09-08 18:38:23

标签: matlab image-processing

假设我在logical matrix中有一个边界图像,其中true表示边界,false表示区域内部。该图像对二维域的曲面细分进行编码。

我想知道在MATLAB中是否有一种紧凑的方法来“修复”那些相邻区域之间的间隔仅为4-connected的像素邻域,并以保留拓扑的方式将它们转换为8-connected镶嵌细分。

我相信这可以通过LUTs完成,但我不确定如何继续。我是否必须(如果有),如何准确评估连接仅3x3的所有4-wise像素区域以填充相应的像素?

1 个答案:

答案 0 :(得分:2)

我建议的解决方案:使用BWHITMISS找到邻域至少为4连接的像素,用矩形结构元素扩展结果,将这些邻域转换为8连接,最后我们结合使用原始图像使用逻辑或。

实施例

bw = [
    0 0 0 1 0 1 0
    0 0 1 1 1 1 1
    0 1 1 1 0 1 0
    0 0 1 0 1 0 0
    0 1 1 0 0 0 0
    0 0 1 0 1 1 1
    0 0 1 0 0 1 0
];

hm = bwhitmiss(bw, [0 1 0; 1 1 1; 0 1 0]);   %# [-1 1 -1; 1 1 1; -1 1 -1]
bw2 = imdilate(hm,ones(3)) | bw;

我们可以看到结果:

[r c] = find(hm);
subplot(121), imshow(bw), hold on, plot(c(:),r(:),'o')
subplot(122), imshow(bw2)

screenshot