matlab練習程式(圓柱形投影)

來源:互聯網
上載者:User

標籤:style   blog   http   color   os   2014   

圓柱形投影就是將一張二維的映像投影到三維的圓柱體上,不過在顯示映像的時候依然是以二維的形式給出。

投影最重要的步驟就是計算投影變換公式,和映像旋轉類似,只要得到變換公式,再依照公式進行代碼編寫就很容易了。

這裡就不寫投影變換公式的推導過程了,直接給出變換公式。公式分為正變換和反變換,編程時,反變換公式通常更有用。

正變換公式如下:

其中,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個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.