我正在寻找一种以编程方式重新创建以下效果的方法:
输入图像:
输入http://www.shiny.co.il/shooshx/ConeCarv/q_input.png
我想迭代地应用"笔画"效果.
第一步看起来像这样:
第1步http://www.shiny.co.il/shooshx/ConeCarv/q_step1.png
第二步是这样的:
alt text http://www.shiny.co.il/shooshx/ConeCarv/q_step2.png
等等.
我假设这将涉及某种边缘检测,然后以某种方式跟踪边缘.
是否有一种已知的算法以高效且稳健的方式执行此操作?
基本上,根据这个线程,自定义算法将是:
取一个像素周围的3x3邻域,对alpha通道进行阈值处理,然后查看像素周围的8个像素中是否有任何一个像素值.如果是这样,则绘制一个给定半径的圆,其中心位于像素处.在内部/外部,通过阈值化的alpha通道进行调制(否定进行另一侧).如果圆半径大于像素(它可能是),则必须对较大的邻域进行阈值处理.
这是使用灰度形态学操作实现的.这也是用于扩展/收缩选择的相同技术.基本上,要划分选择(或alpha通道)的中心,人们会做的是首先制作两个单独的选择副本.第一个选择将通过笔划的半径扩展,而第二个选择将缩小.然后通过从第一个中减去第二个选择来获得笔划的不透明度.
为了进行内部和外部笔划,您将收缩/扩展两倍半径并减去与原始选择相交的部分.
应当注意,最通用的形态算法需要O(m*n)个运算,其中m是图像的像素数,n是"结构元素"中的元素数.但是,对于某些特殊情况,这可以针对O(m)操作进行优化(例如,如果结构元素是矩形或菱形).