算法说明:
图像的Radon变换是每个像素的Radon变换的总和。
该算法首先将图像中的像素分成四个子像素,并分别投影每个子像素,如下图所示。
根据投影位置和箱体中心之间的距离,每个子像素的贡献按比例分成两个最近的仓。如果子像素投影击中仓的中心点,则轴上的仓将获得子像素的全部值,或像素值的四分之一。如果子像素投影命中两个分区之间的边界,则子像素值在分区之间被均匀分割。
语法:
R = radon(I, theta)
[R,xp] = radon(...)[___]= radon(gpuarrayI,theta)
描述:
R = radon(I, theta)
返回角度度R
的强度图像的Radon变换。I
theta
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), colorbar11 iptsetpref('ImshowAxesVisible','off')
作者:耑新新,发布于
转载请注明出处,欢迎邮件交流: