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       
        
    end
end

imshow(img);
figure;
imshow(imgn,[]);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM