基于四角等深约束的深度图像深度平衡校正方案咨询
深度图像四角等深校正问题
我有一张尺寸为11 x 23的深度图像,需要利用四个角点深度值一致的特性,对所有像素的深度值做平衡校正,各角点原始数值见下图:
初始线性校正方案
最初的实现思路是计算相邻角点的深度差,按像素位置累加对应校正差值,代码如下:
import math def corr_func(arr): """ 离散深度值线性校正函数 参数: arr: 待校正深度图像,ndarray格式 返回: arr: 校正后的深度图像,ndarray格式 """ c_00 = int(arr[0][0]) c_01 = int(arr[0][-1]) c_10 = int(arr[-1][0]) y_corr = (c_01 - c_00)/arr.shape[1] x_corr = (c_10 - c_00)/arr.shape[0] print("x_corr = {}, y_corr = {}".format(x_corr, y_corr)) r, c = arr.shape[:2] for i in range(r): for j in range(c): corr = math.floor(j*y_corr + i*x_corr) arr[i,j] -= corr return arr
该方案校正效果较差,问题出在校正值会随坐标累积,导致对角位置的角点校正后数值偏离合理范围。
旋转变换校正方案
后续参考建议,将深度值作为z轴坐标,计算X、Y轴方向的旋转角度,通过旋转变换完成校正,代码如下:
from math import atan2, cos import numpy as np def corr_func(arr): """ 离散深度值非线性校正函数 参数: arr: 待校正深度图像,ndarray格式 返回: arr: 校正后的深度图像,ndarray格式 """ c_00 = int(arr[0][0]) c_01 = int(arr[0][-1]) c_10 = int(arr[-1][0]) alpha = atan2((c_01 - c_00), arr.shape[1]) beta = atan2((c_10 - c_00), arr.shape[0]) arr = arr * cos(alpha) * cos(beta) arr = arr.astype(np.uint8) return arr
该方案效果优于前述线性校正方法,但仍有优化空间,现寻求精度更高的校正方案。
内容的提问来源于stack exchange,提问作者Bilal
相关产品推荐
相关产品推荐

