天天看點

(Python)Gdal與Opencv遙感影像Siticher拼接前言使用Opencv的Stitcher(傻瓜式)TODO:自己實作運作結果

文章目錄

  • 前言
  • 使用Opencv的Stitcher(傻瓜式)
  • TODO:自己實作
  • 運作結果
    • 耗時情況
    • 拼接效果
      • 總體效果
      • 局部細節(接縫處)

前言

“ 很多時候,我們需要研究較大空間範圍的研究區域時,單幅遙感圖無法覆寫整個研究區域,這時就需要對遙感圖像進行鑲嵌(或拼接)。”

本文使用Python+Opencv+GDAL實作相鄰兩個遙感圖像之間重疊區域的拼接。

基本步驟為:

  1. 對每幅圖進行特征點提取
  2. 對特征點進行比對
  3. 進行圖像配準
  4. 把圖像拷貝到另一幅圖像的特定位置
  5. 對重疊邊界進行特殊處理(顔色融合)

    最近使用python進行一些的遙感影像處理,發現攝影測量方面相比于CV領域資料非常匮乏,特此記錄一些小工具的實作,也為遙感領域的開源做出自己的一些貢獻,水準有限,能用而已。

使用Opencv的Stitcher(傻瓜式)

import numpy as np
import cv2
from time import *
def normalization(data):
    _range = np.max(data) - np.min(data)
    return (data - np.min(data)) / _range
def Tiff16to8bit(img_16):
    if (np.max(img_16) - np.min(img_16) != 0):
        img_nrm = normalization(img_16)
        img_8 = np.uint8(255 * img_nrm)
    return img_8

#讀入圖像
img_b = cv2.imread('D:\\SongshanZY3\\ortho\\BWDSC.tif', cv2.IMREAD_LOAD_GDAL)
img_f = cv2.imread('D:\\SongshanZY3\\ortho\\FWDSC.tif', cv2.IMREAD_LOAD_GDAL)
#取一小塊出來
x_offset,y_offset = 5000,6000
block_size_x = 3000
block_size_y = 3000
block_B = img_b[y_offset:y_offset + block_size_y,x_offset:x_offset + block_size_x]
block_F = img_f[y_offset+1000:y_offset+1000 + block_size_y,x_offset:x_offset + block_size_x]
block_B = Tiff16to8bit(block_B)
block_F = Tiff16to8bit(block_F)

#建構拼接器
stitcher = cv2.Stitcher.create(cv2.Stitcher_PANORAMA)#根據不同的OpenCV版本來調用
#需要RGB格式圖
i1 = cv2.cvtColor(block_B,cv2.COLOR_GRAY2RGB)
i2 = cv2.cvtColor(block_F,cv2.COLOR_GRAY2RGB)

begin_time = time()
#key CODE
(_result, pano) = stitcher.stitch((i1, i2))
end_time = time()
run_time = end_time-begin_time
print ('運作時間:',run_time,'s') #該循環程式運作時間: 1.4201874732

cv2.namedWindow('pano',0)
cv2.imshow('pano', pano)
cv2.imwrite('pano.png', pano)
cv2.waitKey(0)
           

TODO:自己實作

運作結果

耗時情況

30003000的小塊,運作時間: 1.5169708728790283 s

80008000的小塊,運作時間: 3.1366703510284424 s

拼接效果

總體效果

(Python)Gdal與Opencv遙感影像Siticher拼接前言使用Opencv的Stitcher(傻瓜式)TODO:自己實作運作結果

局部細節(接縫處)

(Python)Gdal與Opencv遙感影像Siticher拼接前言使用Opencv的Stitcher(傻瓜式)TODO:自己實作運作結果
(Python)Gdal與Opencv遙感影像Siticher拼接前言使用Opencv的Stitcher(傻瓜式)TODO:自己實作運作結果

紋理輪廓無明顯的突變或裂縫,融合效果好。

如需交流,個人聯系方式:WHUwsd1995