Matlab 如何利用椭圆计算透视变换

Matlab 如何利用椭圆计算透视变换,matlab,opencv,image-processing,computer-vision,Matlab,Opencv,Image Processing,Computer Vision,我对3D图像处理非常陌生。我正在我的项目中寻找一个圆的透视角度。 一个有一组白色圆圈的盘子,使用这些圆圈我想找到盘子的旋转角度(3D) 为此,我已经完成了相机校准部分,并获得了相机误差参数。下一步,我捕获了一幅图像并应用了sobel边缘检测 在那之后,我对椭圆拟合算法有点困惑。我看到了很多椭圆拟合算法。哪一种是最好的方法和最快的方法 完成椭圆拟合后,我不知道如何继续?如何使用该椭圆计算旋转和平移矩阵 你能告诉我哪种算法更合适更简单吗。我需要一些matlab代码来理解这个概念 提前谢谢 对不起我的

我对3D图像处理非常陌生。我正在我的项目中寻找一个圆的透视角度。 一个有一组白色圆圈的盘子,使用这些圆圈我想找到盘子的旋转角度(3D)

为此,我已经完成了相机校准部分,并获得了相机误差参数。下一步,我捕获了一幅图像并应用了sobel边缘检测

在那之后,我对椭圆拟合算法有点困惑。我看到了很多椭圆拟合算法。哪一种是最好的方法和最快的方法

完成椭圆拟合后,我不知道如何继续?如何使用该椭圆计算旋转和平移矩阵

你能告诉我哪种算法更合适更简单吗。我需要一些matlab代码来理解这个概念

提前谢谢

对不起我的英语


首先,找到椭圆/圆中心(例如,如其他注释中所述的涡流中心)

然后你可以参考张的经典论文
如果已知某些摄影机参数,例如投影中心,则可通过单个图像估计摄影机姿势。请注意,该方法不适用于正面记录,即透视效果越强,您的估计就越准确。算法相当简单,需要SVD和一些叉积

你的例子很简单:只要找到所有的圆(
[L,N]=bwallabel(image)
),然后穿过每个圆(
),计算它的重心(
[X,Y]=meshgrid(1:size(image,1),1:size(image,2));idx=find(L==level);N=size(idx,2);Xc=sum(X(idx))/N;Yc=sum(Y(idx))/N;
)。现在,您可以通过少平方法将结果与标准具进行比较,以找到变换参数。如果你懂俄语或使用在线翻译,你可以阅读我对矩阵坐标变换的一些想法。还有:如果你想找到所有的欧拉角,你应该至少使用两个摄像头。在这种情况下,您应该找到所有椭圆的边缘(与二值图像及其膨胀不同,之后-
bwlabel
),每个椭圆的近似参数(我建议读取),然后通过矩阵运算计算欧拉角(这将比2D更复杂).谢谢Eddy…但我需要使用单摄像机图像(2D)和另一个图像(2D)来查找所有eulers角度。你能建议哪一个是椭圆拟合的最佳快速算法吗?我不懂俄语,也不能用我自己的语言翻译。这可能对我没用。请阅读我第二条消息中的文章。它给出了椭圆的一个很好的近似值,并且是用英语写的。为了精确地找到欧拉角,我建议您首先制作模型:扫描原始图像,按照从某个点看到的方式进行变换,计算所有椭圆(中心+半轴)的特性,然后尝试计算欧拉角。我认为,逆模型(根据给定的摄像机位置计算椭圆的属性)将帮助您开发直接算法。