码迷,mamicode.com
首页 > 编程语言 > 详细

关于Cewu Lu的《Combining Sketch and Tone for Pencil Drawing Production》一文铅笔画算法的理解和笔录。

时间:2015-02-10 18:14:25      阅读:1965      评论:0      收藏:0      [点我收藏+]

标签:

  相关论文的链接:Combining Sketch and Tone for Pencil Drawing Production 

      第一次看《Combining Sketch and Tone for Pencil Drawing Production》一文是在两年前,随意看了一下,觉得论文里的公式比较多,以为实现有一定的难度,没有去细究,最近在作者主页上看到有 [code of direction classification] 部分代码,下载后觉得还是有自己实现的可能,下面记录下自己实现过程中的一些体会和心得。

      铅笔画其实一直是一个比较难以获得较为理想效果的算法,我看到的论文里这篇文章应该是说相当优秀的。总的来说,其算法分为两个步骤:

      1、Line Drawing with Strokes  得到一幅图 S。

      2、Tone Mapping 得到另外一副图T。

      3、得到最终结果 R = S * T;

   应该说第一步决定了最终的效果,作者通过以下四个步骤得到S图。

       (1)、对原图进行边缘检测,作者论文给出的公式是:

                       技术分享

               按照这个公式实现的效果实际上检测的效果很弱,我认为作者真正意义上可能不是使用的改公式,因为这一步对最终效果的影响很大, 我采用了一些其他能够更好的检测出效果的边缘检测算法,如果Sobel或者PS里FindEges之类的算法。

               作者认为这个公式得到的结果含有太多的噪音并且边缘部分的线条很多不连续,因此提出继续一下几个步骤得到更稳定的效果。

        (2) 对得到的G进行8个方向的卷积,卷积核为沿指定的方向为1,其他的值均为0(实际上考虑抗锯齿问题,用了双线性插值得到卷积核的),卷积核的大小论文提出为图像宽度或高度的1/30(这个我觉得有点不行,当太大时,会有明显的不合理线条出现),具体公式如下:

                         技术分享

               在论文给出的相关代码中,有如下部分:

%% convolution kernel with horizontal direction 
    kerRef = zeros(ks*2+1);
    kerRef(ks+1,:) = 1;

%% classification 
    response = zeros(H,W,dirNum);
    for ii = 0 : (dirNum-1)
        ker = imrotate(kerRef, ii*180/dirNum, bilinear, crop);
        response(:,:,ii+1) = conv2(imEdge, ker, same);
    end

        其实这里的卷积就是按照指定的角度的运动模糊,我们可以用matlab的代码来进行验证:

        比如当角度为22.5(ii = 1),核的大小为5(ks = 5)时,按照上面的代码得到的ker变量为:

       技术分享

       归一化后的结果为:

       技术分享

  而对应的运动模糊的卷积矩阵为(对应的matlab代码为: H = fspecial(‘motion‘, 2*5+1, 22.5):

   技术分享

     可见只有很小的差别。

      (3) 得到各个方向的卷积结果后,对每一个像素点,具有最大的卷积值的那一个方向的响应设置为G,而其他方向的响应设置为0,原文的话语是: 

        The classi?cation is performed by selecting the maximum value among the responses in all directions and is written as

                 技术分享

         我觉得有点不可思议的是上面语句说的是最大值,下面给出的公式确是最小值,这难道是大家的笔误。(实际上应该是最大值的)。

    还有注意的是这里的G(p)是指公式(1)中的G。

       (4)对得到的各个方面的响应再次进行方向卷积,即:

                                     技术分享

          论文中提出要对这个结果进行卷积并进行反相处理得到结果S,这个其实就看你自己的编码方式了。

      这里给出以上4个步骤一些中间结果:

  技术分享 技术分享 技术分享 技术分享 技术分享  

  技术分享 技术分享 技术分享 技术分享 技术分享   

                              原图                  边缘检测图                         22.5度的卷积图                                 22.5度的响应图                         中间结果图S

 

关于Cewu Lu的《Combining Sketch and Tone for Pencil Drawing Production》一文铅笔画算法的理解和笔录。

标签:

原文地址:http://www.cnblogs.com/Imageshop/p/4284291.html

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!