资讯专栏INFORMATION COLUMN

python数字图像处理实现图像的形变与缩放

89542767 / 247人阅读

  小编写这篇文章的主要目的,主要是给大家介绍关于Python的一些事宜,比如会涉及到图像处理相关的问题,比如会涉及到相关的图像的形变与缩放,那么,遇到这种问题的话,具体要怎么操作呢?下面就给大家详细解答下。


  skimage的transform模块


  图形的放大与缩小,应用到的技术是skimage的transform模块,函数比较多,功能齐全。


  1、改变图片尺寸resize


  函数格式为:


  skimage.transform.resize(image,output_shape)


  image:需要改变尺寸的图片


  output_shape:新的图片尺寸


  from skimage import transform,data
  import matplotlib.pyplot as plt
  img=data.camera()
  dst=transform.resize(img,(80,60))
  plt.figure('resize')
  plt.subplot(121)
  plt.title('before resize')
  plt.imshow(img,plt.cm.gray)
  plt.subplot(122)
  plt.title('before resize')
  plt.imshow(dst,plt.cm.gray)
  plt.show()


  将camera图片由原来的512*512大小,变成了80*60大小。从下图中的坐标尺,我们能够看出来:

01.png

  2、按比例缩放rescale


  函数格式为:


  skimage.transform.rescale(image,scale[,...])


  scale参数可以是单个float数,表示缩放的倍数,也可以是一个float型的tuple,如[0.2,0.5],表示将行列数分开进行缩放


  from skimage import transform,data
  img=data.camera()
  print(img.shape)#图片原始大小
  print(transform.rescale(img,0.1).shape)#缩小为原来图片大小的0.1倍
  print(transform.rescale(img,[0.5,0.25]).shape)#缩小为原来图片行数一半,列数四分之一
  print(transform.rescale(img,2).shape)#放大为原来图片大小的2倍


  结果为:


  (512,512)


  (51,51)


  (256,128)


  (1024,1024)


  3、旋转rotate


  skimage.transform.rotate(image,angle[,...],resize=False)


  angle参数是个float类型数,表示旋转的度数


  resize用于控制在旋转时,是否改变大小,默认为False


  from skimage import transform,data
  import matplotlib.pyplot as plt
  img=data.camera()
  print(img.shape)#图片原始大小
  img1=transform.rotate(img,60)#旋转90度,不改变大小
  print(img1.shape)
  img2=transform.rotate(img,30,resize=True)#旋转30度,同时改变大小
  print(img2.shape)
  plt.figure('resize')
  plt.subplot(121)
  plt.title('rotate 60')
  plt.imshow(img1,plt.cm.gray)
  plt.subplot(122)
  plt.title('rotate 30')
  plt.imshow(img2,plt.cm.gray)
  plt.show()

  显示结果:

02.png

  4、图像金字塔


  以多分辨率来解释图像的一种有效但概念简单的结构就是图像金字塔。图像金字塔最初用于机器视觉和图像压缩,一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低的图像集合。金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似。当向金字塔的上层移动时,尺寸和分辨率就降低。


  在此,我们举一个高斯金字塔的应用实例,函数原型为:


  skimage.transform.pyramid_gaussian(image,downscale=2)
  downscale控制着金字塔的缩放比例
  import numpy as np
  import matplotlib.pyplot as plt
  from skimage import data,transform
  image=data.astronaut()#载入宇航员图片
  rows,cols,dim=image.shape#获取图片的行数,列数和通道数
  pyramid=tuple(transform.pyramid_gaussian(image,downscale=2))#产生高斯金字塔图像
  #共生成了log(512)=9幅金字塔图像,加上原始图像共10幅,pyramid[0]-pyramid[1]
  composite_image=np.ones((rows,cols+cols/2,3),dtype=np.double)#生成背景
  composite_image[:rows,:cols,:]=pyramid[0]#融合原始图像
  i_row=0
  for p in pyramid[1:]:
  n_rows,n_cols=p.shape[:2]
  composite_image[i_row:i_row+n_rows,cols:cols+n_cols]=p#循环融合9幅金字塔图像
  i_row+=n_rows
  plt.imshow(composite_image)
  plt.show()

03.png

  上图,就是10张金字塔图像,下标为0的表示原始图像,后面每层的图像行和列变为上一层的一半,直至变为1


  除了高斯金字塔外,还有其它的金字塔,如:


  skimage.transform.pyramid_laplacian(image,downscale=2):


  综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128826.html

相关文章

  • 【JS图形学基础】二维图形学变换

    摘要:计算机图形学中的应用非常广泛的变换是一种称为仿射变换的特殊变换,在仿射变换中的基本变换包括平移旋转缩放剪切这几种。表示缩小,表示放大错切图像错切变换在图像几何形变方面非常有用,常见的错切变换分为方向与方向的错切变换。 二维图形学的变换 使用过前端的css3,canva,svg的小伙伴应该对平移,旋转,缩放,剪切这些效果变换应该很熟悉了,但应该大部分小伙伴应该不清楚其中的原理,在二维图形...

    mozillazg 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<