六 skimage放縮 旋轉 金字塔

2021-10-01 08:57:29 字數 3884 閱讀 7486

影象的形變與縮放,使用的是skimage的transform模組,函式比較多,功能齊全。

函式格式為:

skimage.transform.resize(image, output_shape)

image: 需要改變尺寸的

output_shape: 新的尺寸

# -*- coding: utf-8 -*-

# @time : 2019/12/10 0:37

# @author : sxp

# @email :

# @file : data_type.py

# @project : python_common

from skimage import io,data_dir,color,transform,data

import numpy as np

import matplotlib.pylab as plt

def show_img(img):

io.imshow(img)

io.show()

if __name__ == '__main__':

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('after resize')

plt.imshow(dst,plt.cm.gray)

plt.show()

函式格式為:

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倍

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

angle引數是個float型別數,表示旋轉的度數

resize用於控制在旋轉時,是否改變大小 ,預設為false

# -*- coding: utf-8 -*-

# @time : 2019/12/10 0:37

# @author : sxp

# @email :

# @file : data_type.py

# @project : python_common

from skimage import io,transform,data

import numpy as np

import matplotlib.pylab as plt

def show_img(img):

io.imshow(img)

io.show()

if __name__ == '__main__':

img = data.camera()

dst = transform.resize(img,(80,60))

print(img.shape) # 原始大小

img1 = transform.rotate(img, 90) # 旋轉90度,不改變大小

print(img1.shape)

img2 = transform.rotate(img, 30, resize=true) # 旋轉30度,同時改變大小

print(img2.shape)

plt.figure('resize')

plt.subplot(121)

plt.title('rotate 90')

plt.imshow(img1, plt.cm.gray)

plt.subplot(122)

plt.title('rotate 30')

plt.imshow(img2, plt.cm.gray)

plt.show()

多解析度來解釋影象的一種有效但概念簡單的結構就是影象金字塔。

影象金字塔最初用於機器視覺和影象壓縮,一幅影象的金字塔是一系列以金字塔形狀排列的解析度逐步降低的影象集合。金字塔的底部是待處理影象的高解析度表示,而頂部是低解析度的近似。當向金字塔的上層移動時,尺寸和解析度就降低。

在此,我們舉乙個高斯金字塔的應用例項,函式原型為:

skimage.transform.pyramid_gaussian(image, downscale=2)

downscale控制著金字塔的縮放比例

# -*- coding: utf-8 -*-

# @time : 2019/12/10 1:39

# @author : sxp

# @email :

# @file : pyramid.py

# @project : python_common

import numpy as np

import matplotlib.pyplot as plt

from skimage import data,transform

if __name__ == '__main__':

image = data.astronaut() # 載入太空飛行員

rows, cols, dim = image.shape # 獲取的行數,列數和通道數

pyramid = tuple(transform.pyramid_gaussian(image, downscale=2)) # 產生高斯金字塔影象

# 共生成了log(512)=9幅金字塔影象,加上原始影象共10幅,pyramid[0]-pyramid[9]

print(len(pyramid))

print(pyramid[0].dtype.name)

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

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

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

python 金字塔 Python金字塔

托倫,函式中有幾個小錯誤和乙個邏輯問題print y to a 請注意,此函式生成乙個以z開頭的字串,但您希望將字串以相反的方向連線,而您的另乙個函式print a to y 確實停止了 1位置 例如 還要注意,您需要新增新行字元 n 以獲得一些不錯的輸出。在 我的解決方案是 def print a...

字母金字塔(類同數字金字塔)

問題描述 讓程式要求使用者輸入乙個大寫字母,使用巢狀迴圈產生像下面這樣的金字塔圖案 aaba abcba abcdba abcdecba 演算法分析 每行包括三個部分內容 若干個空格 正序排列的字母 倒序排列的字幕。使用乙個外部迴圈來處理行,在每乙個行中使用三個內部迴圈 乙個處理空格,乙個以公升序列...

數字金字塔

觀察下面的數字金字塔。寫乙個程式來查詢從最高點到底部任意處結束的路徑,使路徑經過數字的和最大。每一步可以走到左下方的點也可以到達右下方的點。7 3 8 8 1 0 2 7 4 4 4 5 2 6 5在上面的樣例中,從7 到 3 到 8 到 7 到 5 的路徑產生了最大 多組輸入資料 第乙個行包含 r...