在图像中产生线条失真

时间:2012-09-17 01:49:19

标签: algorithm image-processing graphics

(我在理论计算机科学论坛上发布了同样的问题,但我怀疑它会得到很多关注,因为它更实用而非理论)

我正在寻找一种算法,它允许我生成一条线,就像它是手动绘制的一样,给定一个样本线。

换句话说,我有一条线(一幅画),我需要重新创建几次,就像人类在描图纸上描绘原始图纸时所做的那样。

当然,人类会将绘图与原始绘图非常接近,但会有轻微的错误。所以我想知道是否存在会扭曲绘图的算法,以便结果看起来像一个人制作的跟踪原稿。

这是一个动画绘图的程序。

2 个答案:

答案 0 :(得分:2)

嗯。这是一个有趣的问题。我不知道Perlin噪音有多逼真,

但是这里是我包含brownian motion类型噪音的测试用例(例如 当对于给定点的直线扰动=先前扰动的总和+具有零中心和某个西格玛的高斯随机数:

different degree of wobbliness

图像从左到右显示为sigma的函数(从左到右递减)

以下是代码:

import numpy as np, numpy.random
import matplotlib.pyplot as plt
np.random.seed(1)
N = 1000
xs = np.arange(N)
thi =  6
sig =  0.00045
def getrand():
        return np.cumsum(np.random.normal(0, sig, size=len(xs)))
        # returns the cumulative sum of the set of random 
        # normally distributed numbers
plt.figure(1)
plt.plot(xs, getrand() * N, linewidth=thi, color='black')
plt.plot(xs, N + getrand() * N, linewidth=thi, color='black')
plt.plot(N + getrand() * N, xs, linewidth=thi, color='black')
plt.plot(getrand() * N, xs, linewidth=thi, color='black')

答案 1 :(得分:1)

一种方法是使用Perlin Noise。您可以在答案中找到有用的链接:Perlin Noise for 1D?