python - 使用 scipy 应用 Sobel 过滤器

标签 python scipy edge-detection

我正在尝试在图像上应用 Sobel 过滤器以使用 scipy 检测边缘。我在 Windows 7 Ultimate(64 位)上使用 Python 3.2(64 位)和 scipy 0.9.0。目前我的代码如下:

import scipy
from scipy import ndimage

im = scipy.misc.imread('bike.jpg')
processed = ndimage.sobel(im, 0)
scipy.misc.imsave('sobel.jpg', processed)

我不知道我做错了什么,但处理后的图像看起来一点也不像它应该的样子。图片“bike.jpg”是一张灰度(模式“L”而非“RGB”)图片,因此每个像素只有一个与之关联的值。

很遗憾,我还不能在这里发布图片(没有足够的声誉),但我在下面提供了链接:

原始图像(bike.jpg): http://s2.postimage.org/64q8w613j/bike.jpg

Scipy 过滤 (sobel.jpg): http://s2.postimage.org/64qajpdlb/sobel.jpg

预期输出: http://s1.postimage.org/5vexz7kdr/normal_sobel.jpg

我显然哪里出错了!有人可以告诉我在哪里吗?谢谢。

最佳答案

1) 使用更高的精度。 2)您只计算沿零轴的导数的近似值。 2D Sobel 算子在 Wikipedia 上有解释。 .试试这个代码:

import numpy
import scipy
from scipy import ndimage

im = scipy.misc.imread('bike.jpg')
im = im.astype('int32')
dx = ndimage.sobel(im, 0)  # horizontal derivative
dy = ndimage.sobel(im, 1)  # vertical derivative
mag = numpy.hypot(dx, dy)  # magnitude
mag *= 255.0 / numpy.max(mag)  # normalize (Q&D)
scipy.misc.imsave('sobel.jpg', mag)

关于python - 使用 scipy 应用 Sobel 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7185655/

相关文章:

python - 处理具有重复多值特征的数据集

python - 使用 scipy.interpolate.LSQBivariateSplines 将二维样条拟合到有间隙的噪声数据

java - Android OpenCV - 获取两条模糊线之间的距离

image-processing - 边缘检测来识别艺术家风格?

字典中的 Python 打印元素产生错误

php - 将 PHP 和 Sql 与 Python 混合使用

python - 如何在数据库中使 Tornado 请求原子化

python - tensorflow 中大型稀疏矩阵的特征向量

python - Shareplum - 删除行 Sharepoint 列表

vhdl - VHDL中的信号边缘检测