当前位置:编程学习 > Matlab >>

matlab高手请指点迷津——关于鱼眼镜头的校正代码

黄有度和苏化明的方法《一种鱼眼图像到透视投影图像的变换模型 a=imread('1.PNG'); I=rgb2gray(a); figure(1),imshow(a); I=rgb2gray(a); [m,n]=size(a); c=ones(size(a)); for i=1:m for j=1:n u=307.32*i/sqrt(i.^2+j.^2+10); v=307.32*j/sqrt(i.^2+j.^2+10); a=ceil(u); b=ceil(v); e=a-u; f=b-v; if u==fix(u)&v==fix(v) c(i,j)=I(u,v); else if 0<u<=1&0<v<=1 c(i,j)=I(1,1); else if 0<u<=1&v>1 c(i,j)=e*(1-f)*I(a,b-1)+e*f*I(a,b); else if 0<v<=1&u>1 c(i,j)=(1-e)*f*I(a-1,b)+e*f*I(a,b); else c(i,j)=(1-e)*(1-f)*I(a-1,b-1)+(1-e)*f*I(a-1,b)+e*(1-f)*I(a,b-1)+e*f*I(a,b) end end end J=mat2gray(c); image(J); 我的程序有什么问题呢,初学matlab图像处理,忘各位大侠帮忙 ??? Error: File: D:\D\matlab\work\Untitled1.m Line: 31 Column: 10 This statement is incomplete.
补充:变换的模型是u=R*i/sqrt(i.^2+j.^2+Z.^2)
                     v=R*j/sqrt(i.^2+j.^2+Z.^2)
其中(u,v)是鱼眼图像上的点,(i,j,Z)是正常图像的点。还有Z的具体取值应该为多少呀?我试了小值 和大值都不合适。
追问:
        	
				
我改了好久 不知道为什么错了 还有end的次数应该是三次的吧,我改为六次就不出现错误 但运行出来的校正图像是空白图像
你看看你的.m文件里31行是那句话
我的百度级别太低不能发图像
先在前面加一句话:map=gray(255);
最后一句改成这样image(J);colormap(map);
是在image(J)前加map=gray(255)吗?运行的结果是
??? Error: File: D:\D\matlab\work\Untitled1.m Line: 32 Column: 24
This statement is incomplete.
32行就是最后一行:image(J);colormap(map);
还有我的.m就是上面的程序,因为在command window里运行没有错误也没有结果,我就把它弄到.m里,朋友告诉我这样可以看出错误。
整段程序改成这样你试试
a=imread('1.PNG');
map=gray(255);
I=rgb2gray(a);
figure(1),imshow(a);
I=rgb2gray(a);
[m,n]=size(a);
c=ones(size(a));
for i=1:m
for j=1:n
u=307.32*i/sqrt(i.^2+j.^2+10);
v=307.32*j/sqrt(i.^2+j.^2+10);
     a=ceil(u);
     b=ceil(v);
     e=a-u;
     f=b-v;
     if u==fix(u)&v==fix(v)
    c(i,j)=I(u,v);
     else if 0<u<=1&0<v<=1
         c(i,j)=I(1,1);
     else if 0<u<=1&v>1
         c(i,j)=e*(1-f)*I(a,b-1)+e*f*I(a,b);
     else if 0<v<=1&u>1
         c(i,j)=(1-e)*f*I(a-1,b)+e*f*I(a,b);
     else c(i,j)=(1-e)*(1-f)*I(a-1,b-1)+(1-e)*f*I(a-1,b)+e*(1-f)*I(a,b-1)+e*f*I(a,b)
     end
 end
 end
J=mat2gray(c);
image(J);colormap(map);
还是那个错误,
??? Error: File: D:\D\matlab\work\Untitled1.m Line: 32 Column: 24
This statement is incomplete.
32行是最后一行。
为什么呢?是不是前面编的不对,我的整体思路是利用校正模型,新建一个图像,把图像中点的像素坐标利用变换到鱼眼图像上的点,如果变换后坐标为整数,则把这点的灰度赋给新建图像的对应点,如果得到的鱼眼坐标不为整数,利用双线性插值把插值后的灰度赋给相应的新建图像上的点。
汗死。。我刚运行了一下,错误在几个else if那里
把空格去掉,改成elseif就行了
是可以得到图像了 但是空白图像 
和原来设计的校正鱼眼图像的本意不同呀 
为什么呢?
这段程序的原理是什么?你告诉我下,帮你分析分析
百度hi里说吧。。这样说好麻烦
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,