在我的项目的一部分中,我需要计算仿射变换图像中补丁的方向。现在我的问题是我不知道如何找到相对于原始未变形图像的计算方向。
例如,在扭曲的图像中找到一个点(100,200)。我可以使用 8x8 相邻像素提取该点的方向。假设它是30度。找到该点的扭曲图像是对原始图像在每个轴上进行 60 度变换的结果。(俯仰、偏航和滚动)。(这种方向提取通常称为计算机视觉中的描述符提取)
现在变换矩阵是已知的。变换图像中点的方向也是已知的。参考点的位置是已知的(使用逆变换)。现在我想知道如果这个点(100,200)进入参考系(例如150,250),新的方向是什么。换句话说,关于参考图像的新方向是什么。
我知道如果我们只有滚动角旋转(60 度),这很容易解决。在这种情况下,参考系的方向将是 30+60 = 90 。
我尝试使用 OpenCV 实现它:
cv::Mat rvec1(3,1,CV_32F); // rot vector related to B
rvec1.at<float>(0,0)=0;
rvec1.at<float>(1,0)=30*to_RAD;
rvec1.at<float>(2,0)=0;
cv::Mat rvec2(3,1,CV_32F); // rot vector related to A
rvec2.at<float>(0,0)=0;
rvec2.at<float>(1,0)=60*to_RAD;
rvec2.at<float>(2,0)=0;
cv::Mat R_A;
cv::Mat R_B;
cv::Rodrigues(rvec1, R_B);
cv::Rodrigues(rvec2, R_A);
cv::Mat R_combined= R_B*R_A;
cv::Mat rvec_result;
cv::Rodrigues(R_combined,rvec_result);
我想使用 2 个旋转矢量创建旋转垫 A 和 B。在将这两个相乘后,我想将其转换为旋转向量。但我得到的唯一结果是最后一行出现运行时错误(cv::Rodrigues(R_combined,rvec_result);)
提前谢谢你的帮助。