1. 程式人生 > >關於《一種魚眼圖象到透視投影圖象的變換模型》

關於《一種魚眼圖象到透視投影圖象的變換模型》

《一種魚眼圖象到透視投影圖象的變換模型》與另一篇論文《一種基於橢圓拋物面透視投影約束的魚眼鏡頭校正方法》其實演算法差不多的。所以試著實現一個就好了,可是我不知道這篇論文演算法的最後一步:確定目標圖象的大小,求(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怎麼確定呢?