(个人)基于深度学习的中国传统特色图像的风格迁移创新实训第七周

本周实现和优化了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

下周工作

可以看到边缘还是有很多不规则的区域,这是由于产生的是位图而造成的锯齿现象。这个需要在接下来解决一下,而且需要对部分区域进行填补。