最近在做一个项目,需要得到一个剪纸的效果,但是通过matlab中边缘检测得到的边缘信息并不是都是连续的,而剪纸的效果是全部都是一刀下来的。因此需要对得到的边缘信息进行连接,这也是一个将图中多个连通域连接的问题。
首先可以先看一下通过canny边缘检测得到的边缘信息,发现还是很碎的。
接下来就进行连通域连接操作。具体步骤如下
- 首先将图片格式转换为二值化
- 将各个连通域进行编号
- 计算当前连通域和剩余连通域中的最短距离,进行连接。
二值化:
I_bw=im2bw(ed);
编号:
L =bwlabel(I_bw);
L矩阵中各个连通域都被进行了编号,每个位置的数值表示其所在的连通域的号码:
求最短距离:
for i =1:max
distance=999999;
[x,y] =find(L==i);
size_x =size(x);
for j =1:max