114 lines
3.7 KiB
Python
114 lines
3.7 KiB
Python
import logging
|
||
# from re import S
|
||
# from oneOrthoAuxData import OrthoAuxData
|
||
# from OrthoImage import ImageHandler
|
||
from tool.algorithm.image.ImageHandle import ImageHandler
|
||
import tarfile
|
||
# from OrthoDB import ManageAlgXML, CheckSource
|
||
from tool.algorithm.xml.AlgXmlHandle import ManageAlgXML, CheckSource # 导入xml文件读取与检查文件
|
||
from OrthoAlg import IndirectOrthorectification, DEMProcess,ImageMatchClass
|
||
# from logHandler import LogHandler
|
||
from tool.algorithm.algtools.logHandler import LogHandler
|
||
from tool.algorithm.xml.CreatMetafile import CreateMetafile
|
||
from OrthoXmlInfo import CreateDict, CreateStadardXmlFile
|
||
from osgeo import gdal, osr
|
||
import os
|
||
import glob
|
||
import gc
|
||
import datetime
|
||
import shutil
|
||
import sys
|
||
import cv2
|
||
|
||
ori_sar_path="D:\MicroWorkspace\C-SAR\Ortho\Temporary\TestSAR\GF3_SAY_QPSI_013952_E118.9_N31.5_20190404_L1A_HH_L10003923848.jpg"
|
||
sim_sar_path="D:\MicroWorkspace\C-SAR\Ortho\Temporary\TestSim\sim_img_sum.jpg"
|
||
work_sapce_path="D:\MicroWorkspace\C-SAR\Ortho\Temporary"
|
||
|
||
'''
|
||
import matplotlib.pyplot as plt
|
||
img1 = cv2.imread(ori_sar_path, 0)
|
||
img2 = cv2.imread(sim_sar_path, 0)
|
||
def cv_show(name,img):
|
||
cv2.imshow(name, img)
|
||
cv2.waitKey(0)
|
||
cv2.destroyAllWindows()
|
||
sift = cv2.SIFT_create()
|
||
kp1, des1 = sift.detectAndCompute(img1, None)
|
||
kp2, des2 = sift.detectAndCompute(img2, None)
|
||
bf = cv2.BFMatcher(crossCheck=True)
|
||
matches = bf.match(des1, des2)
|
||
matches = sorted(matches, key=lambda x: x.distance)
|
||
img3 = cv2.drawMatches(img1, kp1, img2, kp2, matches[:10], None,flags=2)
|
||
cv2.imwrite(work_sapce_path,img3)
|
||
'''
|
||
|
||
# 匹配影像
|
||
def ImageMatch(ori_sar_path,sim_sar_path,work_sapce_path):
|
||
ori_sar=gdal.Open(ori_sar_path)
|
||
sim_sar=gdal.Open(sim_sar_path)
|
||
# 影像尺寸
|
||
ori_height=ori_sar.RasterYSize
|
||
ori_width=ori_sar.RasterXSize
|
||
sim_height=sim_sar.RasterYSize
|
||
sim_width=sim_sar.RasterXSize
|
||
# 分块匹配
|
||
ori_sar_arr=ori_sar.GetRasterBand(1).ReadAsArray(0,0,ori_width,ori_height) # 原始影像
|
||
ori_img=(255*ori_sar_arr/np.max(ori_sar_arr)).astype(np.uint8)
|
||
|
||
sim_sar_arr=np.log(sim_sar.GetRasterBand(1).ReadAsArray(0,0,sim_width,sim_height)+1) # 模拟影像
|
||
sim_img=(1+253*sim_sar_arr/np.max(sim_sar_arr)).astype(np.uint8)
|
||
|
||
res = cv.matchTemplate(img,template,method)
|
||
min_val, max_val, min_loc, max_loc = cv.minMaxLoc(res)
|
||
top_left = max_loc
|
||
# 范围
|
||
min_w=top_left[0] if top_left[0]>0 else 0
|
||
min_h=top_left[1] if top_left[1]>0 else 0
|
||
|
||
max_w=top_left[0]+ori_width if top_left[0]+ori_width<sim_width else sim_width
|
||
max_h=top_left[1]+ori_height if top_left[0]+ori_height<sim_height else sim_height
|
||
# 裁剪
|
||
sim_clip=sim_img[min_h:max_h,min_w:max_w]
|
||
|
||
for i in range(0,ori_img.shape[0],10):
|
||
for j in range(0,ori_img.shape[1],10):
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
pass
|
||
|
||
|
||
|
||
|
||
|
||
import cv2 as cv
|
||
import numpy as np
|
||
from matplotlib import pyplot as plt
|
||
img = cv.imread(sim_sar_path,0)
|
||
img2 = img.copy()
|
||
template = cv.imread(ori_sar_path,0)
|
||
w, h = template.shape[::-1]
|
||
# 列表中所有的6种比较方法
|
||
methods = ['cv.TM_CCOEFF', 'cv.TM_CCOEFF_NORMED', 'cv.TM_CCORR',
|
||
'cv.TM_CCORR_NORMED', 'cv.TM_SQDIFF', 'cv.TM_SQDIFF_NORMED']
|
||
i=0
|
||
for meth in methods:
|
||
img = img2.copy()
|
||
method = eval(meth)
|
||
# 应用模板匹配
|
||
res = cv.matchTemplate(img,template,method)
|
||
min_val, max_val, min_loc, max_loc = cv.minMaxLoc(res)
|
||
# 如果方法是TM_SQDIFF或TM_SQDIFF_NORMED,则取最小值
|
||
if method in [cv.TM_SQDIFF, cv.TM_SQDIFF_NORMED]:
|
||
top_left = min_loc
|
||
else:
|
||
top_left = max_loc
|
||
bottom_right = (top_left[0] + w, top_left[1] + h)
|
||
cv.rectangle(img,top_left, bottom_right, 255, 2)
|
||
cv.imwrite(os.path.join(work_sapce_path,"matchresult_{}.jpg".format(i)),img)
|
||
i=i+1
|