算法說明:
圖像的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沿着值X '軸,其在面向theta逆時針方向從度X軸。兩個軸的原點是圖像的中心像素,其定義為
地板((大小(I)+1)/ 2)
例如,在20×30的圖像中,中心像素為(10,15)。
[___]= radon(gpuarrayI,theta)在GPU上執行Radon變換。輸入圖像和返回值是2-D gpuArrays。theta可以是double基礎類的一個或者gpuArray double。
類支持:
I可以是類double,logical或任何整數類。所有其他輸入和輸出都是類double。這兩個輸入都不可能是稀疏的。
gpuarrayI是與基礎類gpuArray uint8,uint16,uint32,int8,int16,int32,logical,single或double,並且必須是二維的。theta是double底層類的向量或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
