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沿着值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
本文来自博客园,作者:Arthurian,转载请注明原文链接:https://www.cnblogs.com/Arthurian/p/7532121.html
欢迎邮件交流:zhuanxinxin@aliyun.com
 
                    
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号