《单幅圆形鱼眼图像的校正》matlab程序

声明:本文转载至http://blog.csdn.net/wd1603926823/article/details/48374369。转载至此,方便以后查阅

理论部分来自《单幅圆形鱼眼图像的校正》 其实他是在《应用经纬映射的鱼眼图像校正设计方法》得到经纬度后  再采用柱面压缩 把经纬度变换到一个图像平面即可

这篇其实我早就看了  只是之前经纬度校正程序编出来是一个乱七八糟的 现在既然把经纬度校正程序弄正确了 那就可以编这篇了  其实就最后一步不一样而已

function C=zongxiangyasuo(A,R)
%《单幅圆形鱼眼图像的校正》
[m,n,k]=size(A);
C=zeros(m,n);
f=2*R/pi;
dx=pi/m;
dy=dx;
for i=1:m
      for j=1:n
         u=i-R;
         v=R-j;
         ro=sqrt(u^2+v^2);
         if(ro>R)
            continue;
         end
         if(ro==0)
            phi=0;
         elseif(u>0)
             phi=asin(v/ro);
         else
             phi=pi-asin(v/ro);
         end
         theta=ro/f;
         x=f*sin(theta)*cos(phi);
         y=f*sin(theta)*sin(phi);
         z=f*cos(theta);
         rr=sqrt(x^2+z^2);
         sita=pi/2-atan(y/rr);
         if(z>=0)
            fai=acos(x/rr);
         else
            fai=pi-acos(x/rr);
         end
         vv=round(sita/dy);
         if(fai>pi/2)
            uu=2+sqrt(2-2*sin(fai))/sin(pi/2-atan((1-sin(fai))/abs(cos(fai))));
         else
            uu=2-sqrt(2-2*sin(fai))/sin(pi/2-atan((1-sin(fai))/abs(cos(fai))));
         end
         uu=2*R-round(uu/dx);
         if(uu<1||vv<1||uu>m||vv>n)
              continue;
         end
         C(vv,uu,1)=A(j,i,1);
         C(vv,uu,2)=A(j,i,2);
         C(vv,uu,3)=A(j,i,3);
     end
end
C=uint8(C);
T=15;
Y=[];
Z1=[];
Z2=[];
Z3=[];
for i=1:m
    for j=1:n
         I(i,j)=0.59*C(i,j,1)+0.11*C(i,j,2)+0.3*C(i,j,3);
         if(I(i,j)>=T)
            Y=[Y j];
            Z1=[Z1 C(i,j,1)];
            Z2=[Z2 C(i,j,2)];
            Z3=[Z3 C(i,j,3)];
         end
    end
    if(size(Y)<3)
          Y=[];
          Z1=[];
          Z2=[];
          Z3=[];
          continue;
    else
       for j=1:n
          I(i,j)=0.59*C(i,j,1)+0.11*C(i,j,2)+0.3*C(i,j,3);
           if(I(i,j)<T)
             C(i,j,1)=interp1(Y,double(Z1),j,'cubic');
             C(i,j,2)=interp1(Y,double(Z2),j,'cubic');
             C(i,j,3)=interp1(Y,double(Z3),j,'cubic');
           end
       end
    end
    Y=[];
    Z1=[];
    Z2=[];
    Z3=[];
end

结果:

可以看到最后一步处理与经纬度校正不一样  导致了出来结果和上一篇有点不一样 即 图片好像横向拉伸了  之前经纬度我用原图大小可以正好装下 不会丧失原图信息   可是这个柱面压缩校正不行  原图大小不能够容下它  我再改大点试试  也不能设定不能超过原图大小的条件看来      结果如下:

可以看到柱面压缩校正的确像拉伸了一样  校正图比原图大  右边这些黑的 是因为我刚刚只改了校正部分的大小  插值那里没改  所以只把原图大小的地方插值了   我再改下  结果:

这就是王志周童鞋这篇论文中用柱面压缩校正的效果  

经纬度校正和柱面压缩校正对比下:

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值