matlab練習程式(圓柱投影)

2021-09-07 21:25:40 字數 1284 閱讀 1366

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

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

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

正變換公式如下:

其中,x,y為原圖的座標,x',y'為變換後影象的座標,w,h為原圖的寬和高,f=w/(2*tan(hfov/2)),這裡hfov為相機水平視角,我們通過設定這個引數來實現不同的投影效果,hfov取值為(0,pi)之間。

反變換公式可以通過正變換公式推導出來,其實在程式中已經寫出來了。

下面是hfov為pi/2時得到的變換結果:

原圖:

處理後結果:

matlab**如下:

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);

endend

endimshow(img);

figure;

imshow(imgn,);

matlab練習程式(DBSCAN)

和kmeans相比,不需要事先知道資料的類數。以程式設計的角度來考慮,具體演算法流程如下 1.首先選擇乙個待處理資料。2.尋找和待處理資料距離在設定半徑內的資料。3.將找到的半徑內的資料放到乙個佇列中。4.拿佇列頭資料作為當前待處理資料並不斷執行第2步。5.直到遍歷完佇列中所有資料,將這些資料記為一...

matlab練習程式(c c 呼叫matlab)

就我目前了解的c 呼叫matlab有兩種方法。第一種是通過matlab引擎呼叫,也就是這裡用到的方法。第二種是用matlab將m檔案編譯為相應的h lib dll檔案再加以呼叫。使用engine所用到的h和lib檔案基本在d program files matlab r2010b extern裡面,...

matlab練習程式(SUSAN檢測)

susan運算元既可以檢測角點也可以檢測邊緣,不過角點似乎比不過harris,邊緣似乎比不過canny。不過思想還是有點意思的。主要思想就是 首先做乙個和原影象等大的目標影象。然後用乙個圓形的模板,用模板去遍歷原影象每個畫素,把模板內的每個畫素都和模板中心畫素比較,如果灰度小於乙個閾值,那麼就對目標...