一、?圖像金字塔
**圖像金字塔**是圖像中多尺度表達(dá)的一種,最主要用于圖像的分割,是一種以多分辨率來解釋圖像的有效但概念簡(jiǎn)單的結(jié)構(gòu)。簡(jiǎn)單來說, 圖像金字塔是同一圖像不同分辨率的子圖集合.
圖像金字塔最初用于機(jī)器視覺和圖像壓縮。其通過梯次向下采樣獲得,直到達(dá)到某個(gè)終止條件才停止采樣。金字塔的底部是待處理圖像的高分辨率表示,而頂部是低分辨率的近似。我們將一層一層的圖像比喻成金字塔,層級(jí)越高,則圖像越小,分辨率越低。
**常見兩類圖像金字塔**
**高斯金字塔 ( Gaussian pyramid)**: 用來向下/降采樣,主要的圖像金字塔
**拉普拉斯金字塔(Laplacian pyramid)**: 用來從金字塔低層圖像重建上層未采樣圖像,在數(shù)字圖像處理中也即是預(yù)測(cè)殘差,可以對(duì)圖像進(jìn)行最大程度的還原,配合高斯金字塔一起使用。?
1.1 高斯金字塔
**高斯金字塔**是通過高斯平滑和亞采樣獲得一系列下采樣圖像.
原理非常簡(jiǎn)單, 如下圖所示:
原始圖像 M * N -> 處理后圖像 M/2 * N/2.
每次處理后, 結(jié)果圖像是原來的1/4.
- 圖片與卷積核卷積? -- 高斯平滑
- 去除所有偶數(shù)的行和列 -- 圖像縮小到原圖的1/4?
注意: 向下采樣會(huì)丟失圖像信息.
- pyrDown 向下采樣
import cv2
import numpy as np
img = cv2.imread('./lena.png')
print(img.shape)
dst = cv2.pyrDown(img)
print(dst.shape)
cv2.imshow('img', img)
cv2.imshow('dst', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
- pyrUp 向上取樣
? 向上取樣是向下取樣的相反過程, 是指圖片從小變大的過程.
?文章來源地址http://www.zghlxwxcb.cn/news/detail-703552.html
# 向上采樣
# 向下采樣
import cv2
import numpy as np
img = cv2.imread('./lena.png')
print(img.shape)
dst = cv2.pyrUp(img)
print(dst.shape)
cv2.imshow('img', img)
cv2.imshow('dst', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
- 取樣可逆性研究
??? ??? ?在根據(jù)向上和向下取樣的原理, 我們能夠發(fā)現(xiàn)圖像在變大變小的過程中是有信息丟失的. 即使把圖片變回原來大小,圖片也不是原來的圖片了, 而是損失了一定的信息.
# 研究采樣中圖像的損失
import cv2
import numpy as np
img = cv2.imread('./lena.png')
# 先放大, 再縮小
dst = cv2.pyrUp(img)
dst = cv2.pyrDown(dst)
cv2.imshow('img', img)
cv2.imshow('dst', dst)
cv2.imshow('loss', img - dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
1.2 拉普拉斯金字塔
將降采樣之后的圖像再進(jìn)行上采樣操作,然后與之前還沒降采樣的原圖進(jìn)行做差得到殘差圖(為還原圖像做信息的準(zhǔn)備)!
也就是說,拉普拉斯金字塔是通過源圖像減去先縮小后再放大的圖像的一系列圖像構(gòu)成的。保留的是殘差!
殘差就是丟失掉的信息。
拉普拉斯金字塔是由高斯金字塔構(gòu)成的沒有專門的函數(shù)。
拉普拉斯金字塔圖像只像圖像邊緣,它的大部分元素都是0,用于圖像壓縮。
?
# 研究采樣中圖像的損失
import cv2
import numpy as np
img = cv2.imread('./lena.png')
dst = cv2.pyrDown(img)
dst = cv2.pyrUp(dst)
lap0 = img - dst
cv2.imshow('img', img)
cv2.imshow('dst', dst)
cv2.imshow('lap0', lap0)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 研究采樣中圖像的損失
import cv2
import numpy as np
img = cv2.imread('./lena.png')
dst = cv2.pyrDown(img)
dst = cv2.pyrUp(dst)
lap0 = img - dst
cv2.imshow('img', img)
cv2.imshow('dst', dst)
cv2.imshow('lap0', lap0)
第二層拉普拉斯效果:
dst1 = cv2.pyrDown(dst)
dst2 = cv2.pyrUp(dst1)
lap1 = dst - dst2
cv2.imshow('lap1 ', lap1)
cv2.waitKey(0)
cv2.destroyAllWindows()
文章來源:http://www.zghlxwxcb.cn/news/detail-703552.html
?
到了這里,關(guān)于OpenCV 11(圖像金字塔)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!