【问题标题】:From 4-connectivity to 8-connectivity in MATLAB在 MATLAB 中从 4 连接到 8 连接
【发布时间】:2011-11-13 06:02:01
【问题描述】:
假设我在logical matrix 中有一个边界图像,其中true 表示边界,false 表示区域内部。该图像对二维域的细分进行编码。
我想知道 MATLAB 中是否有一种紧凑的方法来“修复”那些相邻区域之间的间隔仅为 4-connected 的像素邻域,并以保留镶嵌拓扑的方式将它们转换为 8-connected。
我相信这可以通过LUTs 完成,但我不确定如何进行。是否必须,如果需要,如何准确评估所有连通性仅为4-wise 的3x3 像素区域以填充相应的像素?
【问题讨论】:
标签:
matlab
image-processing
【解决方案1】:
我提出的解决方案:使用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)