Radon變換——MATLAB


算法說明:

圖像的Radon變換是每個像素的Radon變換的總和。

該算法首先將圖像中的像素分成四個子像素,並分別投影每個子像素,如下圖所示。

根據投影位置和箱體中心之間的距離,每個子像素的貢獻按比例分成兩個最近的倉。如果子像素投影擊中倉的中心點,則軸上的倉將獲得子像素的全部值,或像素值的四分之一。如果子像素投影命中兩個分區之間的邊界,則子像素值在分區之間被均勻分割。

 

語法:

R = radon(I, theta)
[R,xp] = radon(...)
[___]= radon(gpuarrayI,theta)

 

描述:

R = radon(I, theta)返回角度R的強度圖像的Radon變換Itheta

Radon變換是沿着以特定角度定向的徑向線的圖像強度的投影。如果theta是標量,R則是包含theta度數的Radon變換的列向量如果theta是向量,R則是其中每列是其中一個角度的Radon變換的矩陣theta如果省略theta,則默認為0:179。

[R,xp] = radon(...)返回一個xp包含對應於每行的徑向坐標的向量R

徑向坐標返回在xp沿着值'軸,其在面向theta逆時針方向從度X軸。兩個軸的原點是圖像的中心像素,其定義為

地板((大小(I)+1)/ 2)

例如,在20×30的圖像中,中心像素為(10,15)。

[___]= radon(gpuarrayI,theta)在GPU上執行Radon變換。輸入圖像和返回值是2-D gpuArrays。theta可以是double基礎類的一個或者gpuArray double

類支持:

I可以是類doublelogical或任何整數類。所有其他輸入和輸出都是類double這兩個輸入都不可能是稀疏的。

gpuarrayI是與基礎類gpuArray uint8uint16uint32int8int16int32logicalsingledouble,並且必須是二維的。thetadouble底層類向量或gpuArray向量double。

 

實例:

計算Radon變換和顯示圖

使軸縮放可見此圖像。

iptsetpref('ImshowAxesVisible','on')

創建示例圖像。

I = zeros(100,100);
I(25:75, 25:75) = 1;

計算Radon變換。

theta = 0:180;
[R,xp] = radon(I,theta);

顯示變換。

imshow(R,[],'Xdata',theta,'Ydata',xp,'InitialMagnification','fit')
xlabel('\theta (degrees)')
ylabel('x''')
colormap(gca,hot), colorbar

使軸縮放不可見。

iptsetpref('ImshowAxesVisible','off')

 

計算GPU上的Radon變換

在GPU上計算Radon變換並將其可視化。

 1 iptsetpref('ImshowAxesVisible','on')
 2 I = zeros(100,100);
 3 I(25:75, 25:75) = 1;
 4 theta = 0:180;
 5 [R,xp] = radon(gpuArray(I),theta);
 6 imshow(R,[],'Xdata',theta,'Ydata',xp,...
 7             'InitialMagnification','fit')
 8 xlabel('\theta (degrees)')
 9 ylabel('x''')
10 colormap(gca,hot), colorbar
11 iptsetpref('ImshowAxesVisible','off')

 

作者:耑新新,發布於  博客園

轉載請注明出處,歡迎郵件交流:zhuanxinxin@aliyun.com


免責聲明!

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



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