科学计算工具包SciPy图像处理

举报
学海无涯yc 发表于 2022/07/20 18:40:50 2022/07/20
【摘要】 导读scipy中也提供了不少关于图像处理的方法,主要封装在ndimage包中,这篇文章主要向大家来介绍一下这里面的一些图像处理方法的使用图像滤波获取图片from scipy import misc,ndimagefrom matplotlib import pyplot as plt#从网站上获取一张图片img = misc.ascent()#显示灰度图plt.gray()#显示图片plt....

导读

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]]
"""
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。