关于《一种鱼眼图象到透视投影图象的变换模型》
2015-07-25 09:53
197 查看
《一种鱼眼图象到透视投影图象的变换模型》与另一篇论文《一种基于椭圆抛物面透视投影约束的鱼眼镜头校正方法》其实算法差不多的。所以试着实现一个就好了,可是我不知道这篇论文算法的最后一步:确定目标图象的大小,求(uo,vo)对应的中心点(xo,yo),利用公式(1)求出目标图象。 这一步的z怎么确定,如果z确定不了,那怎么可能求出目标图象?
那个先想想,我也同时问了别人,等有结果了再补上:
这里先写算法的前几步吧 反正还是比较清晰的
A=imread('F:\orl_zhifangtu\yuyan3.jpg');
>> [A,R]=kuaisusaomiao(A,40);
接下来开始选择一条对应空间直线的鱼眼上的圆弧 我选的是右边这栋歪掉的大厦 在上面取9个点 因为论文中要6个未知参数嘛 用绿色的菱形表示出来 下图中
>> imshow(A)
>> hold on
>> [i1,j1]=ginput(1);
>> plot(i1,j1,'g.');
>> [i2,j2]=ginput(1);
>> plot(i2,j2,'g.');
>> [i3,j3]=ginput(1);
>> plot(i3,j3,'g.');
>> [i4,j4]=ginput(1);
>> plot(i4,j4,'g.');
>> [i5,j5]=ginput(1);
>> plot(i5,j5,'g.');
>> [i6,j6]=ginput(1);
>> plot(i6,j6,'g.');
>> [i7,j7]=ginput(1);
>> plot(i7,j7,'g.');
>> [i8,j8]=ginput(1);
>> plot(i8,j8,'g.');
>> [i9,j9]=ginput(1);
>> plot(i9,j9,'g.');
>> hold off;
DATA=[i1j1;i2 j2;i3 j3;i4 j4;i5 j5;i6 j6;i7 j7;i8 j8;i9 j9];
W=zeros(9,6);
%每一行放的是A,B,C,D,E,F这6个所求参数的系数
for n=1:9
i=DATA(n,1);
j=DATA(n,2);
W(n,1)=j^2;
W(n,2)=2*i*j;
W(n,3)=i^2;
W(n,4)=j;
W(n,5)=i;
W(n,6)=1;
end
%因为是超定齐次线性方程组 9个方程6个未知数 用最小二乘解出来 对应最小特征值的特征向量就是所求的解
[V D]=eig(W'*W);
D
D =
1.0e+010 *
0.0000 0 0 0 0 0
0 0.0000 0 0 0 0
0 0 0.0000 0 0 0
0 0 0 0.0001 0 0
0 0 0 0 0.0554 0
0 0 0 0 0 5.9756
可是奇怪的是这里有三个都小 都是0 为什么?我取的是第二个
>> V
V =
-0.0000 0.0009 0.0052 0.8840 -0.4344 0.1724
0.0000 0.0013 -0.0031 -0.4239 -0.5898 0.6874
-0.0000 0.0004 0.0060 0.1969 0.6807 0.7055
-0.0024 -0.9997 -0.0254 0.0005 -0.0009 0.0014
0.0097 0.0254 -0.9996 0.0071 0.0037 0.0029
-0.9999 0.0026 -0.0097 0.0001 0.0000 0.0000
我取了第二个特征向量作为解
>> A=9;
>> B=13;
>> C=4;
>> D=9997;
>> E=254;
>> F=26;
按照论文公式求光学中心和长半轴
>> uo=(C*D-B*E)/2/(B^2-A*C);
vo=(A*E-B*D)/2/(B^2-A*C);
R=sqrt(((C*D^2-2*B*D*E+A*E^2)/4/(B^2-A*C)+F)*((A+C+sqrt((A-C)^2+4*B^2))/2/(B^2-A*C)));
光学中心的结果 和长半轴的结果:
如果上面没错 接下来就是论文最后一步 可是那个z怎么确定呢?
那个先想想,我也同时问了别人,等有结果了再补上:
这里先写算法的前几步吧 反正还是比较清晰的
A=imread('F:\orl_zhifangtu\yuyan3.jpg');
>> [A,R]=kuaisusaomiao(A,40);
接下来开始选择一条对应空间直线的鱼眼上的圆弧 我选的是右边这栋歪掉的大厦 在上面取9个点 因为论文中要6个未知参数嘛 用绿色的菱形表示出来 下图中
>> imshow(A)
>> hold on
>> [i1,j1]=ginput(1);
>> plot(i1,j1,'g.');
>> [i2,j2]=ginput(1);
>> plot(i2,j2,'g.');
>> [i3,j3]=ginput(1);
>> plot(i3,j3,'g.');
>> [i4,j4]=ginput(1);
>> plot(i4,j4,'g.');
>> [i5,j5]=ginput(1);
>> plot(i5,j5,'g.');
>> [i6,j6]=ginput(1);
>> plot(i6,j6,'g.');
>> [i7,j7]=ginput(1);
>> plot(i7,j7,'g.');
>> [i8,j8]=ginput(1);
>> plot(i8,j8,'g.');
>> [i9,j9]=ginput(1);
>> plot(i9,j9,'g.');
>> hold off;
DATA=[i1j1;i2 j2;i3 j3;i4 j4;i5 j5;i6 j6;i7 j7;i8 j8;i9 j9];
W=zeros(9,6);
%每一行放的是A,B,C,D,E,F这6个所求参数的系数
for n=1:9
i=DATA(n,1);
j=DATA(n,2);
W(n,1)=j^2;
W(n,2)=2*i*j;
W(n,3)=i^2;
W(n,4)=j;
W(n,5)=i;
W(n,6)=1;
end
%因为是超定齐次线性方程组 9个方程6个未知数 用最小二乘解出来 对应最小特征值的特征向量就是所求的解
[V D]=eig(W'*W);
D
D =
1.0e+010 *
0.0000 0 0 0 0 0
0 0.0000 0 0 0 0
0 0 0.0000 0 0 0
0 0 0 0.0001 0 0
0 0 0 0 0.0554 0
0 0 0 0 0 5.9756
可是奇怪的是这里有三个都小 都是0 为什么?我取的是第二个
>> V
V =
-0.0000 0.0009 0.0052 0.8840 -0.4344 0.1724
0.0000 0.0013 -0.0031 -0.4239 -0.5898 0.6874
-0.0000 0.0004 0.0060 0.1969 0.6807 0.7055
-0.0024 -0.9997 -0.0254 0.0005 -0.0009 0.0014
0.0097 0.0254 -0.9996 0.0071 0.0037 0.0029
-0.9999 0.0026 -0.0097 0.0001 0.0000 0.0000
我取了第二个特征向量作为解
>> A=9;
>> B=13;
>> C=4;
>> D=9997;
>> E=254;
>> F=26;
按照论文公式求光学中心和长半轴
>> uo=(C*D-B*E)/2/(B^2-A*C);
vo=(A*E-B*D)/2/(B^2-A*C);
R=sqrt(((C*D^2-2*B*D*E+A*E^2)/4/(B^2-A*C)+F)*((A+C+sqrt((A-C)^2+4*B^2))/2/(B^2-A*C)));
光学中心的结果 和长半轴的结果:
如果上面没错 接下来就是论文最后一步 可是那个z怎么确定呢?
相关文章推荐
- 2015年7月20日 JS第三课(获取时间,数值取值,定时器)
- JQuery如何监听DIV内容变化
- 随笔
- (剑指Offer)面试题31:连续子数组的最大和
- 一种基于非时间逆序的微博优先处理方法
- CLISP special
- 大富翁
- python ,java 变量作用域
- 编写高质量iOS与OS X代码的52个有效方法上
- 网站设计师行业分析
- 6. 菜单切换 - 被选中的底部无线
- javascript笔记06:类的创建
- 毕业后,你变胖了吗?
- hdu 5284 wyh2000 and a string problem(没有算法,只考思维,字符数组得开20万,不然太小了)
- Java 多线程(六) synchronized关键字详解
- leetcode 228 Summary Ranges
- TOJ 4120 Zombies VS Plants
- TOJ 4120 Zombies VS Plants
- 用Meta标签代码让360双核浏览器默认极速模式打开网站不是兼容模式
- wpf 实现全屏与取消全屏