2

我正在寻找一种以编程方式重新创建以下效果的方法:

给出输入图像:
输入 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

等等。

我认为这将涉及某种边缘检测,然后以某种方式跟踪边缘。
是否有一种已知的算法可以有效且稳健地执行此操作?

4

1 回答 1

6

基本上,根据此线程,自定义算法将是:

取一个像素周围的 3x3 邻域,对 alpha 通道设置阈值,然后查看像素周围的 8 个像素中是否有任何一个与它有不同的 alpha 值。如果是这样,画一个以像素为中心的给定半径的圆。要在内部/外部进行,请通过阈值 Alpha 通道进行调制(否定以进行另一侧)。如果圆半径大于一个像素(它可能是),则必须对更大的邻域进行阈值处理。


这是使用灰度形态学操作实现的。这也是用于扩展/收缩选择的相同技术。基本上,要描画选区(或 Alpha 通道)的中心,首先要做的就是制作选区的两个单独副本。第一个选择会扩大笔画的半径,而第二个选择会收缩。然后将通过从第一个选择中减去第二个选择来获得笔划的不透明度。

为了进行内部和外部笔划,您将收缩/扩展两倍的半径并减去与原始选择相交的部分。

需要注意的是,最通用的形态学算法需要 O(m*n) 次操作,其中 m 是图像的像素数,n 是“结构元素”中的元素数。然而,对于某些特殊情况,这可以优化为 O(m) 操作(例如,如果结构元素是矩形或菱形)。

于 2008-10-31T07:01:27.493 回答