小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

python+opencv圖像金字塔融合 (超詳細講解原理及代碼講解)

 雪柳花明 2017-09-12

本篇內(nèi)容參考《Opencv官方教程中文版(Python)》的內(nèi)容進行講解和分析,其下載網(wǎng)址為 http://download.csdn.net/download/dengxf01/9692646

由于書中代碼所使用版本問題,所以,不少讀者將其代碼復(fù)制后,運行時出現(xiàn)錯誤,在這里我將以Python3.6.1,Opencv 3.2版本進行代碼展示和講解。

圖像金字塔主要涉及兩個函數(shù):cv2.pyrUp()(圖像尺寸變小),cv2.pyrDown()(圖像尺寸變大,但會模糊)

圖像金字塔有兩類類型:高斯金字塔和拉普拉斯金字塔。

高斯金字塔的頂部是通過將底部圖像中的連續(xù)的行和列去除得到的。頂部圖像中的每個像素值等于下一層圖像中 5 個像素的高斯加權(quán)平均值。這樣操作一次一個 MxN 的圖像就變成了一個 M/2xN/2 的圖像。所謂的5個元素是指:前后左右+自身。下圖為高斯金字塔cv2.pyrUp() 的效果

高斯金字塔將小圖變大圖用,cv2.pyrDown(),但是圖像會模糊,如下圖,從小圖變大后的圖像

對于拉普拉斯金字塔,其計算公式與高斯金字塔相關(guān),具體為

Li=Gi-pyrUp(Gi+1), 其中i和i+1為下角標(biāo)

拉普拉斯金字塔的圖像效果為:


圖像融合的兩個重要作用為:

1.實現(xiàn)兩個圖像的無縫連接,下面用蘋果和橘子的例子說明

2.圖像壓縮,從蘋果和橘子的例子中,讀者可以體會如何利用小圖像(被高斯金字塔變換后的圖像)和幾層拉普拉斯金字塔表示大圖像信息(拉普拉斯金字塔即使圖像很大,由于大部分為黑色,可認為是0,因此壓縮后數(shù)量很小)

蘋果和橘子的例子的原始圖像和融合后效果如圖所示:


對于讀者,實施蘋果和橘子的數(shù)據(jù)準(zhǔn)備階段:

蘋果和橘子的圖片,但是要注意?。。。。。。。。。?!由于程序采用六層金字塔,一次其圖片像素的行數(shù)和列數(shù)要能夠被(2X2X2X2X2X2)整除哦,否則計算過程中像素矩陣對不上就麻煩了。

程序:

[python] view plain copy
  1. import cv2  
  2. import numpy as np  
  3. A = cv2.imread('apple.jpg')  
  4. B = cv2.imread('orange.jpg')  
  5. # generate Gaussian pyramid for A  
  6. G = A.copy()  
  7. gpA = [G]  
  8. for i in np.arange(6):     #將蘋果進行高斯金字塔處理,總共六級處理  
  9.     G = cv2.pyrDown(G)  
  10.     gpA.append(G)  
  11. # generate Gaussian pyramid for B  
  12. G = B.copy()  
  13. gpB = [G]  
  14. for i in np.arange(6):  # #將橘子進行高斯金字塔處理,總共六級處理  
  15.     G = cv2.pyrDown(G)  
  16.     gpB.append(G)  
  17. # generate Laplacian Pyramid for A  
  18. lpA = [gpA[5]]                 
  19. for i in np.arange(5,0,-1):    #將蘋果進行拉普拉斯金字塔處理,總共5級處理  
  20.     GE = cv2.pyrUp(gpA[i])  
  21.     L = cv2.subtract(gpA[i-1],GE)  
  22.     lpA.append(L)  
  23. # generate Laplacian Pyramid for B  
  24. lpB = [gpB[5]]  
  25. for i in np.arange(5,0,-1):    #將橘子進行拉普拉斯金字塔處理,總共5級處理  
  26.     GE = cv2.pyrUp(gpB[i])  
  27.     L = cv2.subtract(gpB[i-1],GE)  
  28.     lpB.append(L)  
  29. # Now add left and right halves of images in each level  
  30. #numpy.hstack(tup)  
  31. #Take a sequence of arrays and stack them horizontally  
  32. #to make a single array.  
  33. LS = []  
  34. for la,lb in zip(lpA,lpB):  
  35.     rows,cols,dpt = la.shape  
  36.     ls = np.hstack((la[:,0:cols//2], lb[:,cols//2:]))    #將兩個圖像的矩陣的左半部分和右半部分拼接到一起  
  37.     LS.append(ls)  
  38. # now reconstruct  
  39. ls_ = LS[0]   #這里L(fēng)S[0]為高斯金字塔的最小圖片  
  40. for i in xrange(1,6):                        #第一次循環(huán)的圖像為高斯金字塔的最小圖片,依次通過拉普拉斯金字塔恢復(fù)到大圖像  
  41.     ls_ = cv2.pyrUp(ls_)  
  42.     ls_ = cv2.add(ls_, LS[i])                #采用金字塔拼接方法的圖像  
  43. # image with direct connecting each half  
  44. real = np.hstack((A[:,:cols/2],B[:,cols/2:]))   #直接的拼接  
  45. cv2.imwrite('Pyramid_blending2.jpg',ls_)  
  46. cv2.imwrite('Direct_blending.jpg',real)  

對于讀者進行程序調(diào)試時,可通過cv2.imshow()和cv2.waitKey()函數(shù)進行查看各個過程的輸出。


完!




    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多