首页 > 代码库 > matlab练习程序(圆柱投影)
matlab练习程序(圆柱投影)
圆柱投影就是将一张二维的图像投影到三维的圆柱体上,不过在显示图像的时候依然是以二维的形式给出。
投影最重要的步骤就是计算投影变换公式,和图像旋转类似,只要得到变换公式,再依照公式进行代码编写就很容易了。
这里就不写投影变换公式的推导过程了,直接给出变换公式。公式分为正变换和反变换,编程时,反变换公式通常更有用。
正变换公式如下:
其中,x,y为原图的坐标,x‘,y‘为变换后图像的坐标,W,H为原图的宽和高,f=W/(2*tan(hfOV/2)),这里hfOV为相机水平视角,我们通过设置这个参数来实现不同的投影效果,hfOV取值为(0,pi)之间。
反变换公式可以通过正变换公式推导出来,其实在程序中已经写出来了。
下面是hfOV为pi/2时得到的变换结果:
原图:
处理后结果:
matlab代码如下:
clear all; close all;clc;img=imread(‘lena.jpg‘);[h,w]=size(img);hfOV=pi/2; %可取区间为(0,pi)f=w/(2*tan(hfOV/2));newh=h; %变换后高度不变neww=floor(f*atan((w-w/2)/f)+f*atan(w/(2*f))); %通过正变换公式计算最大宽度imgn=zeros(newh,neww);for i=1:newh for j=1:neww %反变换公式的应用 x=floor(f*tan(j/f-atan(w/(2*f)))+w/2); y=floor((i-h/2)*sqrt((x-w/2)^2+f^2)/f+h/2); if x>=1 && x<=w && y>=1 && y<=h imgn(i,j)=img(y,x); end endendimshow(img);figure;imshow(imgn,[]);
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。