(个人)基于深度学习的中国传统特色图像的风格迁移创新实训第七周
本周实现和优化了canny边缘检测算法,并将得到的各个连通域相互连接得到了一个近似的剪纸效果。
进行高斯滤波和canny边缘检测。
sigma =1;
gausFilter =fspecial('gaussian',[3,3],sigma);
img =imfilter(I_ray,gausFilter,'replicate');
ed =edge(img,'canny',0.08);
可以得到边缘的信息。
接下来就要进行各个连通域的连接。这里的方法是这样的首先设置了一个阈值,选择一个连通域,对其他所有的连通域进行判断,如果他们的最短距离小于阈值,那么就在中间画一条线将它们连接起来。营造出剪纸的效果。为了减少计算的的时间,先将图片进行了缩放。
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);
size_x1 =size(x1);
for a =1:size_x
for c =1:size_x1
temp_distance =abs(x(a)-x1(c))+abs(y(a)-y1(c));
if temp_distance<distance
a1=x(a);
b1=y(a);
c1=x1(c);
d1=y1(c);
distance =temp_distance;
end
end
end
end
if distance<7
plot([b1,d1],[a1,c1],'r','LineWidth',2);
hold on
end
distance =999;
end
如何获取各个连通域的编号:
I_bw=im2bw(ed);
L =bwlabel(I_bw);
L中为各个连通域进行了编码:不同的编号表示着不同的连通域。下面是L矩阵中的数据参数。
这里在plot中花费了很长时间,需要注意的是,第一个参数不是第一个点的坐标而是所有点的y坐标,第二个参数是所有点的x坐标。
效果如下图(颜色变换过):
颜色变化部分:
I_rgb =zeros(m,n,3);
for i =1:m
for j =1:n
if L(i,j)~=0
I_rgb(i,j,1) =255;
end
end
end
下周工作
可以看到边缘还是有很多不规则的区域,这是由于产生的是位图而造成的锯齿现象。这个需要在接下来解决一下,而且需要对部分区域进行填补。