Radon正变换的理解
前言
网上看了些有关Radon变换的介绍,结合自己看书和理解写下这篇blog,内容尽量做到最精简,欢迎阅读啊!
提示:以下是本篇文章正文内容,下面案例可供参考。
一、介绍
Randon变换广泛应用于医学成像中,在X-CT成像中,为获得人体器官或组织的体层平面,X线束需要绕着体层平面的中心点进行平移和旋转,用数学语言描述那便是:对于人体内器官或组织的断层平面f(x,y),它在给定的坐标系XOY中,沿着某一个投影方向,对每一条投影线计算断层平面f(x,y)的先积分,就得到该射线上的投影之g(R,θ),其数学表达式如下:
g
(
R
,
θ
)
=
∫
−
∞
+
∞
∫
−
∞
+
∞
f
(
x
,
y
)
δ
(
x
cos
θ
+
y
sin
θ
−
R
)
d
x
d
y
g(R,\theta )=\int_{-\infty}^{+\infty}\int_{-\infty}^{+\infty}f(x,y)\delta (x\cos\theta +y\sin\theta-R)dxdy
g(R,θ)=∫−∞+∞∫−∞+∞f(x,y)δ(xcosθ+ysinθ−R)dxdy
说完正经的理论,现在说一下我的理解,结合图来理解更快一点搞明白,如下最左侧图所示,亮度集中在中央的正方形上,若将其投影在XOY坐标系的0度射线上,中图所示为一个等高的矩形,而若投影在一条45度的射线上时,最右侧图所示,则变成了一个等腰三角形,是不是很有意思。
我自己简单画了一下其投影的过程,见下面的第二幅图,画的不是特别精致,不过大家可以自己动手画画有助于理解。
二、MATLAB实现
1.图1的matlab程序
png读入后是三维的需要将其降至二维,而后使用radon函数,具体代码如下所示。
close all;clear all;clc;
I = imread("original_pic.png");
I = rgb2gray(I);
I = im2double(I);
[R,xp]=radon(I,[0,45]);
figure;
subplot(131);imshow(I);
subplot(132);plot(xp,R(:,1));
subplot(133);plot(xp,R(:,2));
2.多角度radon变换
close all;clear all;clc;
I = imread("original_pic.png");
I = rgb2gray(I);
I = im2double(I);
theta = 0:10:180;%0-180,每10度画一个
[R,xp] = radon(I,theta);
figure;
subplot(121);imshow(I);
subplot(122);imagesc(theta,xp,R);
colormap(hot);
colorbar;
根据第二幅图的右侧颜色蓝,可以看出0度时,颜色条很均匀,而45度时,中心区域强度远大于两侧的,这就对应上第一部分中的内容。
三、总结
本篇主要是对radon变换的简要理解,文中内容及相关编程参考了清华大学出版社,杨丹,赵海滨,龙哲所编写的的《MATLAB图像处理实例详解》。