首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将矢量场应用到与python一起的2D图像中?

如何将矢量场应用到与python一起的2D图像中?
EN

Stack Overflow用户
提问于 2019-11-04 17:01:20
回答 1查看 1.5K关注 0票数 3

我用库FyeldGenerator生成两个高斯随机场。如果他们被策划了,就像这样:

代码语言:javascript
运行
复制
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中矢量场在图像处理中的应用

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-06 10:18:46

我想你要找的是opencv中的重映射函数。如链接所述,函数根据索引数组mapx和mapy映射值:(x,y)=(mapx(x,y),mapy(x,y))

如果我正确理解了您想要做的事情,那么首先需要为mapx和mapy创建基本索引:

代码语言:javascript
运行
复制
mapx_base, mapy_base = np.meshgrid(np.arange(shape[0]), np.arange(shape[1]))

然后用向量字段变形图像索引。这里我乘以增加变形。

代码语言:javascript
运行
复制
mapx = mapx_base + field_x*30
mapy = mapy_base + field_y*30

最后重新塑造你的形象

代码语言:javascript
运行
复制
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)

当然,如果你想要有一个较少的噪音变形,这个场需要被平滑。

希望这能有所帮助!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58697981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档