我有一个径向失真函数,它给我从0(图像中心)到相对完整的图像场(场高1)的相对失真(百分比)。例如,这个函数将给我一个高达5%的失真,在完整的相对场高度为1。
我试着用它和opencv非扭曲函数一起应用失真,但不知道如何填充矩阵。
如前所述,我只有一个源图像,不知道像焦距这样的相机参数,只是我知道失真函数。
如何在cv2中设置矩阵(src_image,矩阵,.)?
发布于 2021-10-15 18:14:18
在您的情况下更容易使用的OpenCv例程是简历::重绘,而不是不失真的。
在下面,我假设你的扭曲纯粹是径向的。如果您已经将其分解为(x,y),则需要考虑类似的问题。
因此,你有一个失真函数d(r)的距离r = sqrt((x - x_c)^2 + (y - y_c)^2)像素的(x, y)与图像中心的(x_c, y_c)。该函数表示畸变图像中像素的半径r_d相对于未失真的r:(r_d - r) / r = d(r),或等效于r_d = r * (1 - d(r))的变化。
如果给你一个扭曲的图像,并且想要消除失真,你需要反演上面的方程(即解析或数值求解),在感兴趣的范围内为每一个r_d求出r_d的值。然后,您可以创建两个数组,map_x和map_y,它们表示从畸变坐标到非失真坐标的映射:对于畸变图像中给定的整数像素坐标的(x_d, y_d),计算相关联的r_d = sqrt(((x_d - x_c)^2 + (y_d - y_c)^2),然后将相应的r作为r_d的函数求解方程,返回(x, y),并分配map_x[y_d, x_d] = x; map_y[y_d, x_d] = y。最后,将它们传递给cv::remap。
https://stackoverflow.com/questions/69587174
复制相似问题