网友说现在用得多的是双经度法来校正鱼眼图像,理论部分来自题目说的这个期刊论文。
主要分5步:
1,和期刊论文《一种鱼眼图象到透视投影图象的变换模型》中一样求光学中心和真实半径。。。循环三次求平均值得到鱼眼图像的中心和半径
2,目标图像坐标转为双经度坐标
3,双经度坐标转为球面坐标
4,球面坐标转鱼眼图像坐标
5,双线性插值
其中第4步,有两种投影方式:正交投影和等距投影
第1步:
%《一种鱼眼图象到透视投影图象的变换模型》
% 对于齐次线性方程 A*X =0;当A的秩大于列数时,就需要求解最小二乘解 使用SVD分解矩阵A,[U S V] = svd(A); U 由 A*A'的特征向量组成,V 由
%A'*A的特征向量组成,因此,奇异值矩阵S中最小的奇异值对应的V中的奇异向量即为最小二乘解。
function result=doublejingdu(A)
A=imread('F:\fisheye\14.JPG');
[A,R]=kuaisusaomiao(A,40);
[width,height,kk]=size(A);
%xo=R;
%yo=R;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
imshow(A)
hold on;
[x1 y1]=ginput(1);
plot(x1,y1,'g.');
drawnow;
[x2 y2]=ginput(1);
plot(x2,y2,'g.');
drawnow;
[x3 y3]=ginput(1);
plot(x3,y3,'g.');
drawnow;
[x4 y4]=ginput(1);
plot(x4,y4,'g.');
drawnow;
[x5 y5]=ginput(1);
plot(x5,y5,'g.');
drawnow;
[x6 y6]=ginput(1);
plot(x6,y6,'g.');
drawnow;
[x7 y7]=ginput(1);
plot(x7,y7,'g.');
drawnow;
hold off;
%[x8 y8]=ginput(1);
%plot(x8,y8,'g.');
%drawnow;
%[x9 y9]=ginput(1);
%plot(x9,y9,'g.');