www.pudn.com > tuxiangjiaozheng.rar > algo_geo.m, change:2013-01-14,size:1432b


%uv是一个二维矩阵,表示畸变图 
%gm是一个二维矩阵, 表示在校正图上与uv对应的点 
%og表示对称点 
function [processImg] = algo_geo( inputImg , uv, gm , og ) 
    dImg = double( inputImg ); 
    n = size( gm( :,1) ); 
    %转换到以对称点为原点的空间关系并构造矩阵A 
    for k=1:n 
        A(k, : )= [1,gm(k,1)-og(1),gm(k,2)-og(2),gm(k,1)-og(1)^2, ... 
                  (gm(k,1)-og(1))*(gm(k,2)-og(2)),(gm(k,2)-og(2))^2]; 
    end 
    [h,w]=size( dImg(:,:,1)); 
    sp=zeros(h,w,3)+255; 
    a0=pinv(A)* uv(:,2);  %计算上面提到的地址映射的系数估计a 
    b0=pinv(A)* uv(:,1);  %计算上面中提到的地址映射的系数估计b 
    for i=1:h     %从理想图像矩阵出发处理 
        for j=1:w 
            x=[1,j-og(1),i-og(2),(j-og(1))^2,(i-og(2))*(j-og(1)),(i-og(2))^2];   
            u=x*a0+og(2);  % 逆向映射(j,i)到畸变图像矩阵(v,u) 
            v=x*b0+og(1);   
            if (u>1)&&(u<w)&&(v>1)&&(v<h) %处理在图像大小范围内的像素点 
                 uu=floor(u);   %对u取整 
                 vv=floor(v);   %对v取整 
                 arf=u-uu;      
                 bta=v-vv;      
                 for k=1:3         %进行灰度双线性插值 
                     ft1=(1-bta)*dImg(vv,uu,k)+bta*dImg(vv+1,uu,k);  
                     ft2=(1-bta)*dImg(vv,uu+1,k)+bta*dImg(vv+1,uu+1,k); 
                     sp(i,j,k)=(1-arf)*ft1+arf*ft2;  
                 end  
            end 
        end   
    end 
    processImg = uint8(sp);