最近在做一个项目,需要得到一个剪纸的效果,但是通过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
if j~=i
[x1,y1] =find(L==j);

项目中需要实现剪纸效果,通过MATLAB的边缘检测得到的边缘不连续。为此,进行连通域连接操作:先将图片二值化,再对连通域编号,然后计算并连接最短距离。最终用plot展示连接路径。
最低0.47元/天 解锁文章
2568





