假设我在logical matrix
中有一个边界图像,其中true
表示边界,false
表示区域内部。该图像对二维域的曲面细分进行编码。
我想知道在MATLAB中是否有一种紧凑的方法来“修复”那些相邻区域之间的间隔仅为4-connected
的像素邻域,并以保留拓扑的方式将它们转换为8-connected
镶嵌细分。
我相信这可以通过LUTs完成,但我不确定如何继续。我是否必须(如果有),如何准确评估连接仅3x3
的所有4-wise
像素区域以填充相应的像素?
答案 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)