openCV——图像金字塔
圖像金字塔
理論基礎(chǔ)
通常情況下,圖像金字塔的底部是待處理的高分辨率圖像(原始圖像),而頂部則為其低
分辨率的近似圖像。向金字塔的頂部移動(dòng)時(shí),圖像的尺寸和分辨率都不斷地降低。通常情況下,
每向上移動(dòng)一級(jí),圖像的寬和高都降低為原來(lái)的二分之一。最簡(jiǎn)單的圖像金字塔可以通過(guò)不斷地刪除圖像的偶數(shù)行和偶數(shù)列得到。例如,有一幅圖像,
其大小是 NN,刪除其偶數(shù)行和偶數(shù)列后得到一幅(N/2)(N/2)大小的圖像。經(jīng)過(guò)上述處理后,
圖像大小變?yōu)樵瓉?lái)的四分之一,不斷地重復(fù)該過(guò)程,就可以得到該圖像的圖像金字塔。
在向上采樣的過(guò)程中,通常將圖像的寬度和高度都變?yōu)樵瓉?lái)的 2 倍。這意味著,向上采樣
的結(jié)果圖像的大小是原始圖像的 4 倍。因此,要在結(jié)果圖像中補(bǔ)充大量的像素點(diǎn)。對(duì)新生成的
像素點(diǎn)進(jìn)行賦值,有一種常見(jiàn)的向上采樣,對(duì)像素點(diǎn)以補(bǔ)零的方式完成插值。通常是在每列像素點(diǎn)的右側(cè)插
入值為零的列,在每行像素點(diǎn)的下方插入值為零的行。
但是需要注意,此時(shí)圖像中四分之三像素點(diǎn)的值都是零。所以,要
將高斯濾波器系數(shù)乘以 4,以保證得到的像素值范圍在其原有像素值范圍內(nèi)
通過(guò)以上分析可知,向上采樣和向下采樣是相反的兩種操作。但是,由于向下采樣會(huì)丟失
像素值,所以這兩種操作并不是可逆的。也就是說(shuō),對(duì)一幅圖像先向上采樣、再向下采樣,是
無(wú)法恢復(fù)其原始狀態(tài)的;同樣,對(duì)一幅圖像先向下采樣、再向上采樣也無(wú)法恢復(fù)到原始狀態(tài)
API
OpenCV 提供了函數(shù) cv2.pyrDown(),用于實(shí)現(xiàn)圖像高斯金字塔操作中的向下采樣,其語(yǔ)法
形式為:
dst = cv2.pyrDown( src[, dstsize[, borderType]] )
- dst 為目標(biāo)圖像
- src 為原始圖像。
- dstsize 為目標(biāo)圖像的大小
- borderType 為邊界類型, 默認(rèn)值為 BORDER_DEFAULT , 且這里僅 支 持
BORDER_DEFAULT
在 OpenCV 中,使用函數(shù) cv2.pyrUp()實(shí)現(xiàn)圖像金字塔操作中的向上采樣,其語(yǔ)法形式如下:
dst = cv2.pyrUp( src[, dstsize[, borderType]] )
- dst 為目標(biāo)圖像
- src 為原始圖像
- dstsize 為目標(biāo)圖像的大小
- borderType 為邊界類型, 默認(rèn)值為 BORDER_DEFAULT , 且這里僅 支 持
BORDER_DEFAULT
拉普拉斯金字塔
前面我們已經(jīng)介紹過(guò),一幅圖像在經(jīng)過(guò)向下采樣后,再對(duì)其進(jìn)行向上采樣,是無(wú)法恢復(fù)為
原始狀態(tài)的。。這是很明
顯的,因?yàn)橄蛳虏蓸訒r(shí)在使用高斯濾波器處理后還要拋棄偶數(shù)行和偶數(shù)列,不可避免地要丟失
一些信息。
""為了在向上采樣時(shí)能夠恢復(fù)具有較高分辨率的原始圖像,就要獲取在采樣過(guò)程中所丟失的
信息,這些丟失的信息就構(gòu)成了拉普拉斯金字塔。
- Li表示拉普拉斯金字塔中的第 i 層
- Gi表示高斯金字塔中的第 i 層
拉普拉斯金字塔中的第 i 層,等于“高斯金字塔中的第 i 層”與“高斯金字塔中的第 i+1
層的向上采樣結(jié)果”之差。
使用函數(shù) cv2.pyrDown()和 cv2.pyrUp()構(gòu)造拉普拉斯金字塔
L0 = boom - cv2.pyrUp(boom_down_1) L1 = boom_down_1 - cv2.pyrUp(boom_down_2) cvshow("L0", L0) cvshow("L1", L1)總結(jié)
以上是生活随笔為你收集整理的openCV——图像金字塔的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 小程序VM3384 WAService.
- 下一篇: Eulerian Video Magni