圖像的形變與縮放,使用的是skimage的transform模塊,函數(shù)比較多采转,功能齊全耙箍。
1撰糠、改變圖片尺寸resize
函數(shù)格式為:
skimage.transform.resize(image,output_shape)
image: 需要改變尺寸的圖片
output_shape: 新的圖片尺寸
fromskimageimporttransform,dataimportmatplotlib.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
函數(shù)格式為:
skimage.transform.rescale(image,?scale[,?...])
scale參數(shù)可以是單個float數(shù)汁针,表示縮放的倍數(shù)术辐,也可以是一個float型的tuple,如[0.2,0.5],表示將行列數(shù)分開進行縮放
fromskimageimporttransform,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)#縮小為原來圖片行數(shù)一半施无,列數(shù)四分之一print(transform.rescale(img, 2).shape)#放大為原來圖片大小的2倍
結(jié)果為:
(512, 512)
(51, 51)
(256, 128)
(1024, 1024)
3辉词、旋轉(zhuǎn) rotate
skimage.transform.rotate(image,?angle[,?...],resize=False)
angle參數(shù)是個float類型數(shù),表示旋轉(zhuǎn)的度數(shù)
resize用于控制在旋轉(zhuǎn)時猾骡,是否改變大小 瑞躺,默認為False
fromskimageimporttransform,dataimportmatplotlib.pyplot as plt
img=data.camera()print(img.shape)#圖片原始大小img1=transform.rotate(img, 60)#旋轉(zhuǎn)90度,不改變大小print(img1.shape)
img2=transform.rotate(img, 30,resize=True)#旋轉(zhuǎn)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()
顯示結(jié)果:
4隘蝎、圖像金字塔
以多分辨率來解釋圖像的一種有效但概念簡單的結(jié)構(gòu)就是圖像金字塔。圖像金字塔最初用于機器視覺和圖像壓縮襟企,一幅圖像的金字塔是一系列以金字塔形狀排列的分辨率逐步降低的圖像集合嘱么。金字塔的底部是待處理圖像的高分辨率表示,而頂部是低分辨率的近似顽悼。當(dāng)向金字塔的上層移動時曼振,尺寸和分辨率就降低。
在此蔚龙,我們舉一個高斯金字塔的應(yīng)用實例冰评,函數(shù)原型為:
skimage.transform.pyramid_gaussian(image, downscale=2)
downscale控制著金字塔的縮放比例
importnumpy as npimportmatplotlib.pyplot as pltfromskimageimportdata,transform
image= data.astronaut()#載入宇航員圖片rows, cols, dim = image.shape#獲取圖片的行數(shù),列數(shù)和通道數(shù)pyramid = tuple(transform.pyramid_gaussian(image, downscale=2))#產(chǎn)生高斯金字塔圖像#共生成了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=0forpinpyramid[1:]:
n_rows, n_cols= p.shape[:2]
composite_image[i_row:i_row+ n_rows, cols:cols + n_cols] = p#循環(huán)融合9幅金字塔圖像i_row +=n_rows
plt.imshow(composite_image)
plt.show()
上右圖,就是10張金字塔圖像坑填,下標為0的表示原始圖像抛人,后面每層的圖像行和列變?yōu)樯弦粚拥囊话耄敝磷優(yōu)?
除了高斯金字塔外脐瑰,還有其它的金字塔妖枚,如:
skimage.transform.pyramid_laplacian(image, downscale=2):