Home >> 热成像与可见光鸟瞰图地理配准实现
热成像与可见光鸟瞰图地理配准实现
2023-04-03 18:29 AtmosphereMao
鸟瞰图地理配准实现
问题
在进行无人机拍摄鸟瞰图时,热成像rcx.tif
与可见光ldk.tif
所拍出的角度不同,会发生目标无法对应的问题。如图所示。
热成像图:
可见光图:
解决方案
思路:通过特征点匹配,采用仿射变换
,计算特征点偏移量,实现地理配准
通过采用SIFT
特征点检测-Brute-force/FLANN
匹配特征点,但由于热成像
的特征点并不明显,与可见光
匹配性很低,如图所示,无法实现。需要人工手动标注特征点。
通过前端返回的坐标为latlon经纬度
。需要进行转化
def lonlat2geo(dataset, lon, lat):
'''
将经纬度坐标转为投影坐标(具体的投影坐标系由给定数据确定)
:param dataset: GDAL地理数据
:param lon: 地理坐标lon经度
:param lat: 地理坐标lat纬度
:return: 经纬度坐标(lon, lat)对应的投影坐标
'''
prosrs, geosrs = getSRSPair(dataset)
ct = osr.CoordinateTransformation(geosrs, prosrs)
coords = ct.TransformPoint(lon, lat)
return coords[:2]
转为经纬度后再转为像素坐标
def geo2imagexy(dataset, x, y):
'''
根据GDAL的六 参数模型将给定的投影或地理坐标转为影像图上坐标(行列号)
:param dataset: GDAL地理数据
:param x: 投影或地理坐标x
:param y: 投影或地理坐标y
:return: 影坐标或地理坐标(x, y)对应的影像图上行列号(row, col)
'''
trans = dataset.GetGeoTransform()
a = np.array([[trans[1], trans[2]], [trans[4], trans[5]]])
b = np.array([x - trans[0], y - trans[3]])
return np.linalg.solve(a, b) # 使用numpy的linalg.solve进行二元一次方程的求解
最后通过cv2.warpPerspective
实现仿射变换
src1_warp = cv2.warpPerspective(src1_orig, M, (cols, rows), cv2.WARP_INVERSE_MAP)
src2_warp = cv2.warpPerspective(src2_orig, M, (cols, rows), cv2.WARP_INVERSE_MAP)
src3_warp = cv2.warpPerspective(src3_orig, M, (cols, rows), cv2.WARP_INVERSE_MAP)
注意:插值算法需要采用反变换标志
偏移量计算方法采用gdal获取地理坐标,计算差值再重新写入
配准效果:
评论
暂无评论
* 登录后即可评论