导读
scipy
中也提供了不少关于图像处理的方法,主要封装在ndimage
包中,这篇文章主要向大家来介绍一下这里面的一些图像处理方法的使用
图像滤波
- 获取图片
from scipy import misc,ndimage
from matplotlib import pyplot as plt
#从网站上获取一张图片
img = misc.ascent()
#显示灰度图
plt.gray()
#显示图片
plt.imshow(f)
plt.show()
- 滤波
滤波
通常被用于图像的去噪,scipy中也提供了很多的滤波算法
#高斯滤波,sigma设置高斯核的标准差
gauss_f_img = ndimage.gaussian_filter(img,sigma=3)
#最大值滤波
max_f_img = ndimage.maximum_filter(img,size=20)
#中值滤波
median_f_img = ndimage.median_filter(img,size=20)
#最小值滤波
min_f_img = ndimage.minimum_filter(img,size=20)
#百分位滤波
percentile_f_img = ndimage.percentile_filter(img,percentile=20,size=20)
#设置显示图片的list
img_list = [img,gauss_f_img,max_f_img,median_f_img,min_f_img,percentile_f_img]
title_list = ["origin","guassian filter","maximum filter","median filter","minimum filter","percentile filter"]
for i in range(len(img_list)):
plt.subplot(2,3,i+1)
#设置显示图片的标题
plt.title(title_list[i])
#显示图片
plt.imshow(img_list[i])
#关闭坐标轴的显示
plt.axis("off")
plt.show()
图像插值
图像的插值在图像处理中应用也是非常广泛,例如:透视变换
、仿射变换
、平移
、缩放
、旋转
等都能够看到它的身影,scipy
中也提供了几个函数用于图像插值,下面我们来看看
关于图像仿射变换的原理,大家可以参考我的这篇文章一文搞懂仿射变换
- 仿射变换
#定义一个图像的平移矩阵
M = np.array([[1,0,10],[0,1,30]])
#仿射变换
affine_img = ndimage.affine_transform(img,M)
plt.imshow(affine_img)
plt.show()
- 图像旋转
#旋转图像
#reshape设置是否显示所有的图像,True显示所有,False则会对图像进行裁剪
rotate_img = ndimage.rotate(img,45,reshape=False)
plt.imshow(rotate_img)
plt.show()
- 图像的缩放
#将图像缩小到原来的1/2
zoom_img = ndimage.zoom(img,0.5)
plt.imshow(zoom_img)
plt.show()
- 几何插值
通过geometric_transform
我们可以实现几何插值,只需要定义一个图像位置变换的函数即可,下面定义的shift_func
函数可以将图像向左下角移动1个像素,越界的位置默认使用0进行填充
a = np.arange(0,12).reshape((4,3))
def shift_func(output_coords):
#定义插值的函数
return (output_coords[0] - 1,output_coords[1] - 1)
#根据数据的坐标来变换坐标的像素值
t_a = ndimage.geometric_transform(a,shift_func)
"""
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
[[0 0 0]
[0 0 1]
[0 3 4]
[0 6 7]]
"""
文章出处登录后可见!
已经登录?立即刷新