scipy中常用的图像处理

导读

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]]
"""

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2022年5月10日 上午11:21
下一篇 2022年5月10日

相关推荐