我用库FyeldGenerator
生成两个高斯随机场。如果他们被策划了,就像这样:
from FyeldGenerator import generate_field
import matplotlib.pyplot as plt
import numpy as np
# Helper that generates power-law power spectrum
def Pkgen(n):
def Pk(k):
return np.power(k, -n)
return Pk
# Draw samples from a normal distribution
def distrib(shape):
a = np.random.normal(loc=0, scale=1, size=shape)
b = np.random.normal(loc=0, scale=1, size=shape)
return a + 1j * b
shape = (512, 512)
field_x = generate_field(distrib, Pkgen(3), shape)
field_y = generate_field(distrib, Pkgen(3), shape)
plt.imshow(field_x, cmap='seismic')
plt.show()
plt.imshow(field_y, cmap='seismic')
然后用quiver
向量场用matplotlib作图。
现在,我想申请一张大小相同的随机场,向量场的图像。我希望点(i,j)中的像素向方向移动(在2D中),这是在颤器函数中显示的。有什么可以做的吗?
这是在matlab上完成的这个问题的一个例子,但是在3D中:
堆栈溢出链接:matlab中矢量场在图像处理中的应用
发布于 2019-11-06 10:18:46
我想你要找的是opencv中的重映射函数。如链接所述,函数根据索引数组mapx和mapy映射值:(x,y)=(mapx(x,y),mapy(x,y))
如果我正确理解了您想要做的事情,那么首先需要为mapx和mapy创建基本索引:
mapx_base, mapy_base = np.meshgrid(np.arange(shape[0]), np.arange(shape[1]))
然后用向量字段变形图像索引。这里我乘以增加变形。
mapx = mapx_base + field_x*30
mapy = mapy_base + field_y*30
最后重新塑造你的形象
img = cv2.imread('apple.jpg', 0).astype(np.float32)
deformed_apple = cv2.remap(img, mapx.astype(np.float32), mapy.astype(np.float32), cv2.INTER_LINEAR)
当然,如果你想要有一个较少的噪音变形,这个场需要被平滑。
希望这能有所帮助!
https://stackoverflow.com/questions/58697981
复制相似问题