說明:代碼中的register是自己寫的配準函數,我是用深度學習做的,代碼很長,不能公開,大家用自己的配準方法就好。
在進行圖像配準的時候如何評價配準效果是一個很頭疼的問題。對於微小的形變,僅用肉眼觀察配準前後的圖像很難判斷配準效果。一種常見的評價方法是將配準後的圖像與固定圖像重疊在一起,調整各自的透明度,從而判斷兩張圖的對齊情況。就像下面這張圖這樣。左圖是固定圖像與浮動圖像的疊加效果,右圖是固定圖像與配準後圖像的疊加效果。
用python寫的函數如下。
def addimage(img_1,img_2,img_3):
#將灰度圖轉換爲彩圖 底用藍色,頂用紅色
img = np.zeros((512,512,3))
img[:,:,0]=img_1#藍色
img1=img
img = np.zeros((512,512,3))
img[:,:,2]=img_2
img2=img#紅色的浮動圖像
#固定和浮動
overlap1=cv2.addWeighted(img1,0.5,img2,0.5,0)
#固定和配準後
img[:,:,2]=img_3
img3 = img
overlap2=cv2.addWeighted(img1,0.5,img3,0.5,0)
#浮動和配準後
img = np.zeros((512,512,3))
img[:,:,0]=img_2
img2=img
img = np.zeros((512,512,3))
img[:,:,2]=img_3
img3=img
overlap3=cv2.addWeighted(img2,0.5,img3,0.5,0)
cv2.imwrite('4.jpg',overlap1)
cv2.imwrite('5.jpg',overlap2)
cv2.imwrite('6.jpg',overlap3)
函數的調用方式如下:
if __name__ == "__main__":
img1 = cv2.imread('../data/train/fix_overlap/2_0.jpg',0)
img2 = cv2.imread('../data/train/move_overlap/2_0.jpg',0)
img3 = register(img2,img1)[0]
addimage(img1,img2,img3)
生成的三張圖片如下:分別是固定+浮動,固定+配準後,浮動+配準後