Radon(拉当) 变换:超详细讲解(附MATLAB,Python 代码)

news/2024/9/8 13:00:09

Radon 变换

Radon 变换是数学上用于函数或图像的一种积分变换,广泛应用于图像处理领域,尤其是在计算机断层成像 (CT) 中。本文档将详细介绍 Radon 变换的数学含义及其在图像处理中的应用。

数学定义

Radon 变换的数学定义是将二维函数 f ( x , y ) f(x,y) f(x,y) 转换为其在各个角度 θ \theta θ 上的投影。设 f ( x , y ) f(x,y) f(x,y) 是定义在 R 2 \mathbb{R}^2 R2 上的函数,Radon 变换可以表示为:

R { f } ( p , θ ) = ∫ − ∞ ∞ ∫ − ∞ ∞ f ( x , y ) δ ( x cos ⁡ θ + y sin ⁡ θ − p ) d x d y R\{f\}(p,\theta) = \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f(x,y) \delta(x\cos\theta + y\sin\theta - p) \,dx\,dy R{f}(p,θ)=f(x,y)δ(xcosθ+ysinθp)dxdy

其中, δ \delta δ 是 Dirac delta 函数, p p p 是在角度 θ \theta θ 上的投影距离。

更直观地,可以将 Radon 变换理解为:在给定的角度 θ \theta θ 上,通过将图像 f ( x , y ) f(x,y) f(x,y) 沿垂直于 θ \theta θ 的方向进行积分,得到在该角度上的投影 R { f } ( p , θ ) R\{f\}(p,\theta) R{f}(p,θ).

性质

Radon 变换具有以下几个重要性质:

  1. 线性性质:若 f f f g g g 是两个函数, a a a b b b 是常数,则有
    R { a f + b g } = a R { f } + b R { g } R\{af + bg\} = aR\{f\} + bR\{g\} R{af+bg}=aR{f}+bR{g}

  2. 平移性质:若 f ( x , y ) f(x,y) f(x,y) 平移了 ( x 0 , y 0 ) (x_0, y_0) (x0,y0),则其 Radon 变换的结果也是相应平移的。

  3. 旋转性质:若 f ( x , y ) f(x,y) f(x,y) 旋转了角度 ϕ \phi ϕ,则其 Radon 变换的结果也相应旋转 ϕ \phi ϕ.

在图像处理中的应用

Radon 变换在图像处理中的应用非常广泛,以下是几个主要应用领域:

1. 计算机断层成像 (CT)

在 CT 成像中,Radon 变换用于从多个角度获取对象内部结构的投影数据。这些投影数据经过反投影算法处理后,可以重建出对象的内部图像。具体步骤如下:

  1. 获取投影数据:通过旋转 X 射线源和检测器,获取不同角度的投影数据。
  2. Radon 变换:将二维图像 f ( x , y ) f(x,y) f(x,y) 转换为多个角度的投影 R { f } ( p , θ ) R\{f\}(p,\theta) R{f}(p,θ).
  3. 反投影:使用逆 Radon 变换将投影数据 R { f } ( p , θ ) R\{f\}(p,\theta) R{f}(p,θ) 重建回二维图像 f ( x , y ) f(x,y) f(x,y).

2. 图像复原

在图像复原中,Radon 变换可以用于去噪和增强图像。例如,可以通过分析不同角度的投影数据,识别和去除图像中的噪声,从而提高图像质量。

3. 模式识别

Radon 变换还可以用于模式识别和特征提取。在这类应用中,可以通过分析图像在不同角度的投影数据,提取出特定模式或特征,从而实现图像分类或目标识别。

逆 Radon 变换

逆 Radon 变换用于将投影数据恢复成原始图像。通常使用滤波反投影算法 (Filtered Back Projection, FBP) 来实现。其基本步骤如下:

  1. 对投影数据应用滤波操作,通常使用 Ram-Lak 滤波器。
  2. 将滤波后的投影数据进行反投影,得到重建图像。

逆 Radon 变换的数学表示为:

f ( x , y ) = ∫ 0 π R { f } ( p , θ ) d θ , f(x,y) = \int_{0}^{\pi} R\{f\}(p,\theta) \, d\theta, f(x,y)=0πR{f}(p,θ)dθ,

其中, R { f } ( p , θ ) R\{f\}(p,\theta) R{f}(p,θ) 是滤波后的投影数据。

示例代码

以下是一个使用 Python 和 Scipy 实现 Radon 变换和逆 Radon 变换的示例代码:

import numpy as np
import matplotlib.pyplot as plt
from skimage.transform import radon, iradon# 生成一个二维图像
image = np.zeros((100, 100))
image[30:70, 30:70] = 1# 执行 Radon 变换
theta = np.linspace(0., 180., max(image.shape), endpoint=False)
sinogram = radon(image, theta=theta, circle=True)# 执行逆 Radon 变换
reconstruction = iradon(sinogram, theta=theta, circle=True)# 显示原始图像、Radon 变换结果和重建图像
fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(15, 5))
ax1.set_title("Original")
ax1.imshow(image, cmap=plt.cm.Greys_r)
ax2.set_title("Radon Transform\n(Sinogram)")
ax2.set_xlabel("Projection angle (deg)")
ax2.set_ylabel("Projection position (pixels)")
ax2.imshow(sinogram, cmap=plt.cm.Greys_r, aspect='auto')
ax3.set_title("Reconstruction\nfrom Radon transform")
ax3.imshow(reconstruction, cmap=plt.cm.Greys_r)
plt.show()

结果显示:
在这里插入图片描述
以上代码展示了用 Scipy 库进行 Radon 变换和逆 Radon 变换,并正确显示原始图像、Radon 变换的结果(正弦图)以及重建图像。

Matlab 例子

为了读者方便,这里再给出一个 Matlab Radon 变换的例子。
以下是一个使用 MATLAB 实现 Radon 变换和逆 Radon 变换的示例代码:

% 生成一个二维图像
image = zeros(100, 100);
image(30:70, 30:70) = 1;% 执行 Radon 变换
theta = 0:179;
[R, xp] = radon(image, theta);% 执行逆 Radon 变换
I = iradon(R, theta);% 显示原始图像、Radon 变换结果和重建图像
figure;
subplot(1,3,1);
imshow(image, []);
title('Original');subplot(1,3,2);
imagesc(theta, xp, R);
xlabel('Projection angle (degrees)');
ylabel('X''');
title('Radon Transform (Sinogram)');subplot(1,3,3);
imshow(I, []);
title('Reconstruction from Radon transform');

运行结果:
在这里插入图片描述
效果不错!

如果读者有需求,我们将通过一系列博客展示图像处理相关的知识,所有文章均有相应代码实现。请持续关注!


作者 :计算小屋
个人主页 : 计算小屋的主页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/14951.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

硅纪元视角 | 类器官智能OI技术实现将人脑植入机器人

在数字化浪潮的推动下,人工智能(AI)正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展,捕捉行业动态;提供深入的新闻解读,助您洞悉技术背后的逻辑;汇聚行业专家的见解,…

基于微信小程序+SpringBoot+Vue的校园自助打印系统(带1w+文档)

基于微信小程序SpringBootVue的校园自助打印系统(带1w文档) 基于微信小程序SpringBootVue的校园自助打印系统(带1w文档) 管理信息可以处理复杂的信息从而提高用户的工作效率,减少失误。所以本基于Vue和微信小程序的校园自助打印系统的开发非常有意义,本系…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十八章 驱动模块编译进内核

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

el-menu根据多层树形结构递归遍历展示菜单栏

文章目录 前提条件假设菜单等级只有两个等级结果如下所示 但是如果菜单等级超过两个等级或者多个等级的话App.vueMenuItems.vue结果如下所示 关于遍历时图标前的展示后续完善关于点击路由跳转参考element plus的官网即可 前提条件 package.json如下所示,这是一个Vi…

【Linux】条件变量及生产者消费者模型

为什么要将这两者放在一起进行呢? 主要是因为生产消费与条件变量关系密切,正好相辅相成。 目录 条件变量:条件变量的引出:条件变量的解释与接口:测试代码: 生产者消费者模型:概念:代…

Mindspore框架循环神经网络RNN模型实现情感分类|(二)词向量

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|(一)IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|(二)预训练词向量 Mindspore框架循环神经网络RNN模型实现…