使用 scipy 应用 Sobel 过滤器

2024-03-28

我正在尝试在图像上应用 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 http://s2.postimage.org/64q8w613j/bike.jpg

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

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

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


1)使用更高的精度。 2) 您仅计算沿零轴的导数的近似值。 2D Sobel 算子的解释为维基百科 http://en.wikipedia.org/wiki/Sobel_operator。试试这个代码:

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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 scipy 应用 Sobel 过滤器 的相关文章

随机推荐