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大小。从下图中的坐标尺,我们能够看出来:

 

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()

显示结果:

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()

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

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

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

  • 10
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: skimage.transform.resize是scikit-image图像处理库中的一个函数,用于调整图像的大小。 它的语法如下: ``` skimage.transform.resize(image, output_shape, *, order=1, mode='reflect', cval=0, clip=True, preserve_range=False, anti_aliasing=True, anti_aliasing_sigma=None) ``` 其中,参数说明如下: - image:要调整大小的图像。 - output_shape:新图像的输出形状。可以是一个整数,表示输出图像的边长,也可以是一个元组,表示输出图像的形状。 - order:插值方法的阶数。默认为1,表示双线性插值。可选值为0、1、2、3、4、5,分别对应最近邻插值、双线性插值、三次样条插值、双三次插值、分段常值插值和分段线性插值。 - mode:边界处理模式。默认为'reflect',表示对称复制模式。可选值还有'constant'、'edge'、'wrap'和'symmetric'等。 - cval:边界填充值。默认为0。 - clip:是否将输出限制在输入范围内。默认为True。 - preserve_range:是否保持图像的数值范围。默认为False,表示将输出图像到0-1范围内。 - anti_aliasing:是否对输出图像进行抗锯齿处理。默认为True。 - anti_aliasing_sigma:抗锯齿滤波器的标准差。默认为None,表示自动计算。 使用skimage.transform.resize函数可以轻松调整图像的大小,使其符合实际需求。 ### 回答2: skimage.transform.resize是Python中scikit-image库中的一个图像处理函数,用于调整图像的大小。 这个函数的语法格式如下: ```python resize(image, output_shape, mode='reflect', anti_aliasing=True) ``` 其中,image是要调整大小的输入图像数据,output_shape是调整后的输出图像大小,mode是可选参数,表示调整大小时边缘像素的填充方式,默认为'reflect',表示使用图像的边缘像素进行填充,anti_aliasing是可选参数,表示是否进行抗锯齿处理,默认为True。 resize函数通过调整输入图像的尺寸,可以实现图像的大等效果。调整后的图像尺寸由output_shape参数指定,可以是一个元组,也可以是一个整数。 在调整大小的过程中,如果设置了anti_aliasing为True,函数会对调整后的图像进行抗锯齿处理,以获得更平滑的效果。而mode参数可以控制边缘像素的填充方式,可以根据具体的需求选择不同的方式。 调整大小后,函数会返回一个与output_shape参数指定尺寸相匹配的新图像。 总之,skimage.transform.resize函数是一个方便实用的图像处理函数,可以轻松地调整图像的大小,实现图像的大等效果。 ### 回答3: skimage.transform.resize是一个用于调整图像大小的函数,它可以根据指定的尺寸对图像进行。 首先,我们需要导入skimage包中的transform模块,以便使用该函数。然后,我们可以传入原始图像和目标尺寸作为参数,函数会返回调整尺寸后的图像。 使用skimage.transform.resize函数时,可以选择不同的方法,例如默认的双线性插值方法(默认方法),最近邻插值方法等。这些方法可以在函数中通过传入参数进行指定。另外,函数还可以接受一个布尔类型的参数来决定是否保持原始图像的纵横比例。 在使用skimage.transform.resize函数调整图像大小之前,通常还需要进行一些预处理操作,例如将图像转换为灰度图像或彩色图像,确保图像尺寸与目标尺寸匹配等。 总结来说,skimage.transform.resize是一个用于对图像进行的函数,可以根据指定的尺寸调整图像的大小。它在图像处理任务中非常常用,例如在计算机视觉、深度学习等领域中常用于数据预处理阶段。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

scott198512

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值