- 本文是個人快速入門OpenCV-Python的電子筆記,由於水平有限,難免出現錯漏,敬請批評改正。
cv2.pyrUp()實現圖像金字塔
import cv2 import numpy as np img1=cv2.imread("1.jpg") img1_resize=cv2.resize(img1,(50,50)) ''' dst = cv2.pyrUp( src[, dstsize[, borderType]] ) 參數說明: dst 為目標圖像。 src 為原始圖像。 dstsize 為目標圖像的大小。 borderType 為邊界類型 , 默認值為BORDER_DEFAULT , 且這裡僅支持BORDER_DEFAULT。 ''' r1=cv2.pyrUp(img1_resize) r2=cv2.pyrUp(r1) r3=cv2.pyrUp(r2) cv2.imshow("origin",img1_resize) cv2.imshow("r1",r1) cv2.imshow("r2",r2) cv2.imshow("r3",r3) cv2.waitKey() cv2.destroyAllWindows()
拉普拉斯金字塔
- 一幅圖像在經過向下采樣後,再對其進行向上采樣,是無法恢復為原始狀態的。
- 向上采樣並不是向下采樣的逆運算。這是很明顯的,因為向下采樣時在使用高斯濾波器處理後還要拋棄偶數行和偶數列,不可避免地要丟失一些信息。
- 為了在向上采樣時能夠恢復具有較高分辨率的原始圖像,就要獲取在采樣過程中所丟失的信息,這些丟失的信息就構成了拉普拉斯金字塔。
- 拉普拉斯金字塔的定義為 L i = G i − p y r U p ( G i + 1 ) L_i = G_i - pyrUp(G_i + 1) Li=Gi−pyrUp(Gi+1)其中, L i L_i Li 表示拉普拉斯金字塔中的第 i i i層。 G i G_i Gi表示高斯金字塔中的第 i i i層。
cv2.pyrDown()和 cv2.pyrUp()構造拉普拉斯金字塔
import cv2 import numpy as np img1=cv2.imread("1.jpg") img1_resize=cv2.resize(img1,(400,400)) ''' dst = cv2.pyrDown( src[, dstsize[, borderType]] ) dst = cv2.pyrUp( src[, dstsize[, borderType]] ) 參數說明: dst 為目標圖像。 src 為原始圖像。 dstsize 為目標圖像的大小。 borderType 為邊界類型 , 默認值為BORDER_DEFAULT , 且這裡僅支持BORDER_DEFAULT。 ''' G0=img1_resize G1=cv2.pyrDown(G0) G2=cv2.pyrDown(G1) G3=cv2.pyrDown(G2) L0=G0-cv2.pyrUp(G1) L1=G1-cv2.pyrUp(G2) L2=G2-cv2.pyrUp(G3) cv2.imshow("L0",L0) cv2.imshow("L1",L1) cv2.imshow("L2",L2) cv2.waitKey() cv2.destroyAllWindows()
應用:恢復高分辨率圖像
import cv2 import numpy as np img1=cv2.imread("1.jpg") img1_resize=cv2.resize(img1,(400,400)) ''' dst = cv2.pyrDown( src[, dstsize[, borderType]] ) dst = cv2.pyrUp( src[, dstsize[, borderType]] ) 參數說明: dst 為目標圖像。 src 為原始圖像。 dstsize 為目標圖像的大小。 borderType 為邊界類型 , 默認值為BORDER_DEFAULT , 且這裡僅支持BORDER_DEFAULT。 ''' G0=img1_resize G1=cv2.pyrDown(G0) L0=G0-cv2.pyrUp(G1) RO=L0+cv2.pyrUp(G1) # 通過拉普拉斯圖像復原的原始圖像 print("GO.shape=",G0.shape) print("RO.shape=",RO.shape) res=RO-G0 # 將 G0 和 RO 做減法運算 # 計算 res 的絕對值,避免求和時負負為正,3+(-3)=0 res=abs(res) # 計算 res 所有元素的和 print("原始圖像 GO 與恢復圖像 RO 之差的絕對值和:",np.sum(res)) cv2.imshow("Origin_img_G0",G0) cv2.imshow("Laplacian_img_L0",L0) cv2.imshow("Restore_img_RO",RO) cv2.waitKey() cv2.destroyAllWindows()
參考文獻
[1] https://opencv.org/
[2] 李立宗. OpenCV輕松入門:面向Python. 北京: 電子工業出版社,2019
- 更多精彩內容,可點擊進入
OpenCV-Python快速入門專欄或我的個人主頁查看