欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【python学习笔记】27:scipy中ndimage模块作图像滤波

程序员文章站 2024-03-25 21:58:28
...

scipy的ndimage可以用于做n维图像的处理。
*高斯滤波

>>> from scipy import misc
>>> from scipy import ndimage
>>> import matplotlib.pyplot as plt
>>> test=misc.ascent() #用于测试的图像
>>> plt.figure() #创建画布
<matplotlib.figure.Figure object at 0x000000000687D860>
>>> plt.imshow(test) #绘制测试图像
<matplotlib.image.AxesImage object at 0x0000000006F4AB00>
>>> plt.show() #显示原始图像

【python学习笔记】27:scipy中ndimage模块作图像滤波

>>> gaus_test=ndimage.gaussian_filter(test,sigma=7) #高斯滤波
>>> plt.imshow(gaus_test) #绘制新产生的图像(数组)
<matplotlib.image.AxesImage object at 0x0000000007492588>
>>> plt.show() #显示更新后的画布

【python学习笔记】27:scipy中ndimage模块作图像滤波

*图像边缘化
因为图像是用数组表示的,可以先作高斯滤波让它们一定程度上变模糊,然后相减,那些相似的值就变小了,再进行一定倍数的放大(让小的值和大的值相差更多),然后加到某个基准值上,就可以实现边缘锐化了。

>>> gaus1=ndimage.gaussian_filter(test,sigma=1)
>>> gaus3=ndimage.gaussian_filter(test,sigma=3)
>>> sharp=gaus3+6*(gaus3-gaus1) #作差放大并加到基准值上
>>> plt.imshow(sharp)
<matplotlib.image.AxesImage object at 0x0000000007709CF8>
>>> plt.show()

【python学习笔记】27:scipy中ndimage模块作图像滤波

*用ndimage中值滤波

>>> mid_test=ndimage.median_filter(test,7) #直接作中值滤波
>>> plt.imshow(mid_test)
<matplotlib.image.AxesImage object at 0x0000000007884EB8>
>>> plt.show()

这里用ndimage.median_filter()可以直接作二维图像的中值滤波,在参数中指定邻域(滤波窗口的像素长)。
【python学习笔记】27:scipy中ndimage模块作图像滤波
该模块的更多方法,可以在导入后用dir查看。