圖像金字塔是由一幅圖像的多個(gè)不同分辨率的子圖所構(gòu)成的圖像集合款筑。該組圖像是由單個(gè)圖像不斷地降采樣所產(chǎn)生的。
1.理論基礎(chǔ)
圖像金字塔是同一圖像不同分辨率的子圖集合屈藐,由原圖像通過不斷地向下采樣產(chǎn)生踩娘。最簡(jiǎn)單的圖像金字塔可以通過刪除圖像的偶數(shù)行和偶數(shù)列得到娘荡。這樣圖像大小變?yōu)樵瓉淼乃姆种弧?/p>
也可以通過對(duì)原始圖像濾波,得到原始圖像的近似圖像魁袜,然后對(duì)近似圖像刪除偶數(shù)行和偶數(shù)列账千,從而獲取向下采樣的結(jié)果。有多種濾波器可以選擇课梳,例如:鄰域?yàn)V波器和高斯濾波器大年,從而可以得到平均金字塔(由鄰域?yàn)V波器產(chǎn)生)和高斯金字塔(由高斯濾波器產(chǎn)生)。
在向上采樣過程中鞠呈,通常將圖像的寬度和高度都變?yōu)樵瓉淼?倍融师,這意味著圖像大小需要變?yōu)樵瓉淼?倍,這就需要補(bǔ)充大量的像素點(diǎn)蚁吝。對(duì)新生的像素點(diǎn)進(jìn)行賦值旱爆,稱為插值處理舀射。有一種常見的向上采樣,對(duì)像素點(diǎn)以補(bǔ)零的方式完成插值怀伦,通常向右(下)插入值為零的列(行)后控。完成插值后,使用向下采樣是所用到的高斯核進(jìn)行濾波空镜。要注意浩淘,此時(shí)圖像中四分之三的像素點(diǎn)的值都是零,所以要將高斯濾波器的系數(shù)乘以4吴攒,以保證得到像素值范圍在原有的像素范圍內(nèi)张抄。
向上采樣和向下采樣是相反的兩種操作,但是由于向下采樣會(huì)丟失像素值洼怔,所以這兩種操作并不是可逆的署惯。
2.pyrDown函數(shù)
為了實(shí)現(xiàn)高斯金字塔,OpenCV提供了函數(shù):
dst: 為目標(biāo)圖像
src: 為原始圖像
dtsize: 為目標(biāo)圖像的大小镣隶,默認(rèn)情況下极谊,輸出圖像的大小為Size((src.cols+1)/2,(src.rows+1)/2),且任何情況下,圖像尺寸必須滿足:
borderType: 為邊界類型安岂,默認(rèn)值cv2.BORDER_DEFAULT轻猖。
該函數(shù)首先對(duì)原始圖像進(jìn)行高斯濾波轉(zhuǎn)換,獲取原始圖像的近似值域那,然后通過拋棄偶數(shù)行和偶數(shù)列來實(shí)現(xiàn)向下采樣咙边。
例如:
可以看到,經(jīng)過向下采樣次员,圖像的分辨率變低了败许。
3.pyrUp函數(shù)
為實(shí)現(xiàn)向上采樣,OpenCV提供了函數(shù):
dst: 為目標(biāo)圖像
src: 為原始圖像
dtsize: 為目標(biāo)圖像的大小
borderType: 為邊界類型淑蔚,默認(rèn)值cv2.BORDER_DEFAULT市殷。
默認(rèn)情況下,圖像的大小為刹衫。
在任何情況下醋寝,圖像尺寸需要滿足條件:
圖像向上采樣時(shí),在每個(gè)圖像的右側(cè)绪妹、下方分別插入零值列和行甥桂,然后用鄉(xiāng)下采樣時(shí)用的高斯核進(jìn)行濾波,得到向上采樣的結(jié)果圖邮旷。為保證像素值區(qū)間和原始圖像保持一致,需要將高斯核的系數(shù)乘以4蝇摸。這就是pyrUp()函數(shù)所做的工作婶肩。
例如:
另外办陷,圖像先向下采樣,再向上采樣律歼,雖然圖像的尺寸變?yōu)樵瓉淼拇笮×嗣窬担倚Ч雌饋硐嗨疲袼刂凳遣幌嗟鹊南栈佟<床蓸邮遣豢赡娴摹?/p>
4.拉普拉斯金字塔
拉普拉斯金字塔可以用于這個(gè)場(chǎng)景:有時(shí)候我們希望通過對(duì)金字塔中的小圖像進(jìn)行向上采樣制圈,以獲取完整的大尺寸高分辨率的圖像。
為了在向上采樣時(shí)能恢復(fù)具有較高分辨率的原始圖像畔况,需要獲取在采樣過程中損失的信息鲸鹦,這些丟失的信息就構(gòu)成了拉普拉斯金字塔。拉普拉斯金字塔的定義形式:
Li : 表示拉普拉斯金字塔的的第i層跷跪;
Gi : 表示高斯金字塔的第i層
例如: