Можно использовать Perlin Noise для добавления некоторой неопределенности в коллекцию 2D-координат (если коллекция представляет собой одну пару, это тоже хорошо). Вы можете рассмотреть возвращаемое значение шума (в диапазоне [-1, 1] для выделенной библиотеки) вместе с некоторым фактором, чтобы определить, насколько это влияет на ваши входные координаты. Чем больше фактор, тем больше влияние на ваши данные. Вот один из самых простых возможных примеров:
from noise import snoise2 # Simplex noise for 2D points
x, y = 0.5, 0.3
factor = 0.1
n = snoise2(x, y)
print x + n * factor, y + n * factor
Мы также можем рассмотреть гораздо больший фактор и применить ту же идею к изображениям. Учитывая factor = 15
и округляя полученные координаты ближайшего соседа, мы идем с изображения слева, чтобы изображение, справа:
Полный код для получения изображения следующим образом. Факторы n1
и n2
были использованы для получения «менее скучного» изображения.
import sys
from noise import snoise2
from PIL import Image
img = Image.open(sys.argv[1]).convert('L')
result = Image.new('L', img.size)
width, height = img.size
factor = 15
res = result.load()
im = img.load()
for x in xrange(width):
for y in xrange(height):
n1 = snoise2(x, y)
n2 = snoise2(y, x)
pt = [int(round(x + n1 * factor)), int(round(y + n2 * factor))]
pt[0] = min(max(0, pt[0]), width - 1)
pt[1] = min(max(0, pt[1]), height - 1)
res[x, y] = im[tuple(pt)]
result.save(sys.argv[2])
Конечно, это даже не царапается, как может использоваться шум Перлина. В качестве другого примера, учитывая определенную функцию, вы можете «зашумлять» входы и комбинировать с указанным фактором для создания разных выходов. Например, вот результат того, что на какой-либо функции на основе косинуса:
Если вы просто хотите добавить немного шума двух чисел (х и у), которые вам не нужны Перлина шума - просто используйте функцию Гаусса, что-то вроде ['random.gauss (x, noisiness)'] (http://docs.python.org/2/library/random.html#random.gauss) – voithos
Это правда, но перлин шум классный :) – mmgp
gauss kinda работает, но он оставляет что-то, что мне нужно, это то, что координаты могут быть реплицированы, если бы я знал перестановку. – NothingToSay