Python圖像處理之圖像金字塔詳解
一.圖像金字塔原理
上一篇文章講解的圖像采樣處理可以降低圖像的大小,本文將補(bǔ)充圖像金字塔知識(shí),了解專門用于圖像向上采樣和向下采樣的pyrUp()和pyrDown()函數(shù)。
圖像金字塔是指由一組圖像且不同分別率的子圖集合,它是圖像多尺度表達(dá)的一種,以多分辨率來(lái)解釋圖像的結(jié)構(gòu),主要用于圖像的分割或壓縮。一幅圖像的金字塔是一系列以金字塔形狀排列的分辨率逐步降低,且來(lái)源于同一張?jiān)紙D的圖像集合。如圖10-1所示,它包括了四層圖像,將這一層一層的圖像比喻成金字塔。圖像金字塔可以通過(guò)梯次向下采樣獲得,直到達(dá)到某個(gè)終止條件才停止采樣,在向下采樣中,層級(jí)越高,則圖像越小,分辨率越低[1-2]。
生成圖像金字塔主要包括兩種方式:
- 向下取樣
- 向上取樣
在圖中,將圖像G0轉(zhuǎn)換為G1、G2、G3,圖像分辨率不斷降低的過(guò)程稱為向下取樣;將G3轉(zhuǎn)換為G2、G1、G0,圖像分辨率不斷增大的過(guò)程稱為向上取樣。
二.圖像向上取樣
在圖像向上取樣是由小圖像不斷放圖像的過(guò)程。它將圖像在每個(gè)方向上擴(kuò)大為原圖像的2倍,新增的行和列均用0來(lái)填充,并使用與“向下取樣”相同的卷積核乘以4,再與放大后的圖像進(jìn)行卷積運(yùn)算,以獲得“新增像素”的新值。如圖10-2所示,它在原始像素45、123、89、149之間各新增了一行和一列值為0的像素。
在OpenCV中,向上取樣使用的函數(shù)為pyrUp(),其原型如下所示:
dst = pyrUp(src[, dst[, dstsize[, borderType]]])
– src表示輸入圖像,
– dst表示輸出圖像,和輸入圖像具有一樣的尺寸和類型
– dstsize表示輸出圖像的大小,默認(rèn)值為Size()
– borderType表示像素外推方法,詳見cv::bordertypes
向上取樣的代碼如下所示:
# -*- coding: utf-8 -*- # By:Eastmount import cv2 ? import numpy as np ? import matplotlib.pyplot as plt #讀取原始圖像 img = cv2.imread('lena-small.png') #圖像向上取樣 r = cv2.pyrUp(img) #顯示圖像 cv2.imshow('original', img) cv2.imshow('PyrUp', r) cv2.waitKey() cv2.destroyAllWindows()
輸出結(jié)果如圖10-3所示,它將原始圖像擴(kuò)大為原圖像的四倍。
多次向上取樣的代碼如下。
# -*- coding: utf-8 -*- # By:Eastmount import cv2 ? import numpy as np ? import matplotlib.pyplot as plt #讀取原始圖像 img = cv2.imread('lena-small.png') #圖像向上取樣 r1 = cv2.pyrUp(img) r2 = cv2.pyrUp(r1) r3 = cv2.pyrUp(r2) #顯示圖像 cv2.imshow('original', img) cv2.imshow('PyrUp1', r1) cv2.imshow('PyrUp2', r2) cv2.imshow('PyrUp3', r3) cv2.waitKey() cv2.destroyAllWindows()
輸出結(jié)果如圖10-4所示,每次向上取樣均為上次圖像的四倍,但圖像的清晰度會(huì)降低。
三.圖像向下取樣
在圖像向下取樣中,使用最多的是高斯金字塔。它將對(duì)圖像Gi進(jìn)行高斯核卷積,并刪除原圖中所有的偶數(shù)行和列,最終縮小圖像。其中,高斯核卷積運(yùn)算就是對(duì)整幅圖像進(jìn)行加權(quán)平均的過(guò)程,每一個(gè)像素點(diǎn)的值,都由其本身和鄰域內(nèi)的其他像素值(權(quán)重不同)經(jīng)過(guò)加權(quán)平均后得到。常見的3×3和5×5高斯核如下:
高斯核卷積讓臨近中心的像素點(diǎn)具有更高的重要度,對(duì)周圍像素計(jì)算加權(quán)平均值,如圖10-5所示,其中心位置權(quán)重最高為0.4。
在OpenCV中,向下取樣使用的函數(shù)為pyrDown(),其原型如下所示:
dst = pyrDown(src[, dst[, dstsize[, borderType]]])
– src表示輸入圖像,
– dst表示輸出圖像,和輸入圖像具有一樣的尺寸和類型
– dstsize表示輸出圖像的大小,默認(rèn)值為Size()
– borderType表示像素外推方法,詳見cv::bordertypes
向下取樣的代碼如下所示:
# -*- coding: utf-8 -*- # By:Eastmount import cv2 ? import numpy as np ? import matplotlib.pyplot as plt #讀取原始圖像 img = cv2.imread('nv.png') #圖像向下取樣 r = cv2.pyrDown(img) #顯示圖像 cv2.imshow('original', img) cv2.imshow('PyrDown', r) cv2.waitKey() cv2.destroyAllWindows()
輸出結(jié)果如圖10-6所示,它將原始圖像壓縮成原圖的四分之一。
多次向下取樣的代碼如下。
# -*- coding: utf-8 -*- # By:Eastmount import cv2 ? import numpy as np ? import matplotlib.pyplot as plt #讀取原始圖像 img = cv2.imread('nv.png') #圖像向下取樣 r1 = cv2.pyrDown(img) r2 = cv2.pyrDown(r1) r3 = cv2.pyrDown(r2) #顯示圖像 cv2.imshow('original', img) cv2.imshow('PyrDown1', r1) cv2.imshow('PyrDown2', r2) cv2.imshow('PyrDown3', r3) cv2.waitKey() cv2.destroyAllWindows()
輸出結(jié)果如圖10-7所示,每次向下取樣均為上次的四分之一,并且圖像的清晰度會(huì)降低。
四.總結(jié)
本文主要講解圖像金字塔處理,包括圖像向上取樣和向下取樣。需要注意,向上取樣放大后的圖像比原始圖像要模糊,而每次向下取樣會(huì)刪除偶數(shù)行和列,它會(huì)不停地丟失圖像的信息。此外,向上采樣和向下采樣不是互逆的操作,經(jīng)過(guò)兩種操作后,是無(wú)法恢復(fù)原始圖像的。
以上就是Python圖像處理之圖像金字塔詳解的詳細(xì)內(nèi)容,更多關(guān)于Python圖像金字塔的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 教你利用python的matplotlib(pyplot)繪制折線圖和柱狀圖
- Python數(shù)據(jù)分析之使用matplotlib繪制折線圖、柱狀圖和柱線混合圖
- Python數(shù)據(jù)分析Matplotlib?柱狀圖繪制
- 手把手教你使用Python繪制時(shí)間序列圖
- python?OpenCV圖像金字塔
- python計(jì)算機(jī)視覺opencv圖像金字塔輪廓及模板匹配
- python實(shí)現(xiàn)圖像高斯金字塔的示例代碼
- python 用opencv實(shí)現(xiàn)圖像修復(fù)和圖像金字塔
- python繪制發(fā)散型柱狀圖+誤差陰影時(shí)間序列圖+雙坐標(biāo)系時(shí)間序列圖+繪制金字塔圖
相關(guān)文章
python dataframe實(shí)現(xiàn)統(tǒng)計(jì)行列中零值的個(gè)數(shù)
這篇文章主要介紹了python dataframe實(shí)現(xiàn)統(tǒng)計(jì)行列中零值的個(gè)數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02python如何通過(guò)protobuf實(shí)現(xiàn)rpc
這篇文章主要為大家詳細(xì)介紹了python通過(guò)protobuf實(shí)現(xiàn)rpc的方法,感興趣的朋友可以參考一下2016-03-03Pytest生成測(cè)試報(bào)告的實(shí)現(xiàn)
本文介紹了如何使用 pytest-html 插件生成測(cè)試報(bào)告,并提供了詳細(xì)的操作步驟、配置項(xiàng)和示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11Linux下Python安裝完成后使用pip命令的詳細(xì)教程
這篇文章主要介紹了Linux下Python安裝完成后使用pip命令的詳細(xì)教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11Pycharm中pyqt工具配置(Qt Designer、PyUIC、PyRCC)
Pycharm中進(jìn)行擴(kuò)展工具設(shè)置,從而實(shí)現(xiàn)在pycharm中打開Qt Designer、Ui文件生成Py文件、資源文件生成Py文件三個(gè)功能,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Python中關(guān)于matplotlib圖片的灰度處理方式
這篇文章主要介紹了Python中關(guān)于matplotlib圖片的灰度處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08Python callable()函數(shù)用法實(shí)例分析
這篇文章主要介紹了Python callable()函數(shù)用法,結(jié)合實(shí)例形式分析了Python callable()函數(shù)的功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-03-03