Python中的图像梯度向量场

罗德里戈·巴拉瓦勒(Rodrigo Baravalle)

我正在尝试使用Python获取图像梯度矢量场(类似于此matlab问题)。

这是原始图像: http:/ /dcc.fceia.unr.edu.ar/~rbaravalle/gradient/test.png

这是我的代码:

import numpy as np
import matplotlib.pyplot as plt
import Image
from PIL import ImageFilter

I = Image.open('test.png').transpose(Image.FLIP_TOP_BOTTOM)
I = I.filter(ImageFilter.BLUR)
p = np.asarray(I)
w,h = I.size
y, x = np.mgrid[0:h:500j, 0:w:500j]

dy, dx = np.gradient(p)
skip = (slice(None, None, 3), slice(None, None, 3))

fig, ax = plt.subplots()
im = ax.imshow(I, extent=[x.min(), x.max(), y.min(), y.max()])
ax.quiver(x[skip], y[skip], dx[skip], dy[skip])

ax.set(aspect=1, title='Quiver Plot')
plt.show()

结果如下: http://dcc.fceia.unr.edu.ar/~rbaravalle/gradient/result.png

问题在于向量似乎不正确。放大图像时,这一点变得更加清晰:

http://dcc.fceia.unr.edu.ar/~rbaravalle/gradient/result2.png

为什么某些向量按预期指向中心,而其他向量却没有指向中心?

致电的结果可能有问题np.gradient吗?

埃德·史密斯

我认为您的奇怪结果至少部分是因为p是type uint8即使是numpy diff,也明显导致此dtype数组的值不正确。如果通过将的定义替换p为以下内容来转换为有符号整数p = np.asarray(I).astype(int8)那么diff的结果是正确的。以下代码为我提供了一个合理的字段,

import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
from PIL import ImageFilter

I = Image.open('./test.png')
I = I.filter(ImageFilter.BLUR)
p = np.asarray(I).astype('int8')
w,h = I.size
x, y = np.mgrid[0:h:500j, 0:w:500j]

dy, dx = np.gradient(p)
skip = (slice(None, None, 3), slice(None, None, 3))

fig, ax = plt.subplots()
im = ax.imshow(I.transpose(Image.FLIP_TOP_BOTTOM), 
               extent=[x.min(), x.max(), y.min(), y.max()])
plt.colorbar(im)
ax.quiver(x[skip], y[skip], dx[skip].T, dy[skip].T)

ax.set(aspect=1, title='Quiver Plot')
plt.show()

这给出了以下内容:

解决方案

并关闭它,就像您期望的那样,

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Matlab中快速计算图像的梯度

来自分类Dev

向量化梯度下降算法

来自分类Dev

面部图像中的相关特征向量?

来自分类Dev

剑道网格图像场

来自分类Dev

图像梯度角计算

来自分类Dev

Matlab中的梯度下降

来自分类Dev

计算GLSL中向量的散度(或向量的梯度)

来自分类Dev

绘制点电荷的向量场

来自分类Dev

通过NumPy归一化向量场

来自分类Dev

了解Numpy中的梯度下降算法的梯度

来自分类Dev

如何在MATLAB中创建梯度幅值图像

来自分类Dev

tensorflow梯度函数中grad参数的含义(python)

来自分类Dev

如何在python中实现小批量梯度下降?

来自分类Dev

如何在drupal 8中显示动态场的图像?

来自分类Dev

如何获得图像的亮度梯度

来自分类Dev

Python向量化嵌套的图像处理循环

来自分类Dev

Python中列向量乘积的向量实现

来自分类Dev

Python中的数字梯度下降

来自分类Dev

向量场平均代码不能一起平滑吗?

来自分类Dev

`streamline`未绘制此向量场

来自分类Dev

在mayavi中绘制梯度矢量场

来自分类Dev

估计图像线梯度(不是像素梯度)

来自分类Dev

通过NumPy归一化向量场

来自分类Dev

在Python中实现梯度运算符

来自分类Dev

R中的梯度下降的图向量

来自分类Dev

如何在python中实现小批量梯度下降?

来自分类Dev

Matlab:标量场的梯度

来自分类Dev

从向量场计算表面

来自分类Dev

Sympy 从向量场中获取向量