2012-04-11 303 views
0

我有一個256x256投影矩陣。每行是以等角度拍攝的投影。我需要用matlab反向投影生成原始圖像,而我對matlab並不熟悉。你可以建議我任何代碼示例或alghorithms?我發現了一些類似的代碼,我無法使用它們生成原始圖像。使用MATLAB投影矩陣反投影

回答

1

這應該是與iradon命令比較簡單,如果您有圖像處理工具箱。如果你不這樣做,這將會更加困難,因爲你需要推出自己的版本。顯然,你不能用這個,但是這是非常值得我得到的圖像,如果我使用:

I = iradon(Pteta',linspace(0,179,size(Pteta,1)); 

那麼,你怎麼能這樣做自己?我會盡力幫助你,而不會給你答案 - 畢竟這是作業!

首先,考慮一下你的0度投影。想象一下你投射的軸有1,256個單位。現在想象一下,後面這些的投影在你的圖像座標,它會是這個樣子: backprojected coordinates of a 0-degree projection

同樣,認爲一個90度的投影是這樣的: backprojected coordinates of a 0-degree projection

酷,我們可以得到這些矩陣通過使用[X, Y] = meshgrid(1:256);,但離軸投影呢?想想沿着一些角度線的距離,如轉換極座標/笛卡爾座標:

theta = 45 % projection angle in degrees 
t = X*cosd(theta) + Y*sind(theta); 

它的工作原理!

backprojected coordinates of a 45-degree projection

這裏有一個問題,但!注意現在的值超過350了?它也有點偏離中心。座標現在超過了我們的投影長度,因爲正方形的對角線比邊長要長。我會讓你知道如何解決這個問題,但是最終的圖像會比最初的預測要小,你可能需要使用不同的單位(-127到128而不是1到256)。

現在,您只需將這些角度的投影索引爲反投影整個圖像的實際值即可。這裏我們還有第二個問題,因爲這些值不是整數!我們可以圍繞它們,這被稱爲最近鄰居插值,但它不能給出最好的結果。

proj = Pteta(angle,:); 
% add projection filtering here 
t = X*cosd(theta) + Y*sind(theta); 
% do some rounding/interpolating to make t all integers 
imagesc(proj(t)); 

對於我們偏離中心的版本,這給了我們這個形象,或類似的東西: 45-degree backprojection

現在你只需要爲每一個角度做到這一點,並添加他們都放棄了。

+0

雖然我不允許使用iradon命令,但我試過它給了我一些隨機圖像。我需要獲得像汽車或樹木這樣的真實形象。 和角度跨度[0,pi] 這裏是矩陣,如果有幫助:http://www.mediafire.com/?rn6j2h7rbkje3oe – dum 2012-04-11 20:47:44

+0

這聽起來像這是你的功課,所以我已經添加了該標記。你知道背投影是如何工作的(即在紙上)? – aganders3 2012-04-11 20:50:38

+0

好的,我剛剛打開了你的投影矩陣 - 這是扇形束數據嗎? – aganders3 2012-04-11 20:55:23