CT投影(距离驱动)算子实现?

问题描述 投票:0回答:5

我正在尝试使用 MATLAB 实现 CT(计算机断层扫描)投影算子 A,我认为它也经常被称为“系统矩阵”。

基本上,对于 N x N 图像 M,可以通过将投影算子与图像相乘来获得投影数据 P:

P = 上午

并且可以通过将投影算子的(共轭)转置乘以投影数据来执行反投影过程:

M = A'P

有人对如何实现矩阵 A 有任何想法/示例/示例代码(例如:Radon 变换)吗?如果可能的话,我真的很想从一个小尺寸的矩阵开始,比如 8 x 8 或 16 x 16。

我的问题实际上是:如何实现投影算子,这样通过将算子与图像相乘,我可以获得投影,并且通过将算子的(共轭)转置与投影相乘,我可以获得原始图像回来了。

编辑:

特别是,我想实现距离驱动的投影仪,在这种情况下光束轨迹(平行、扇形等)并不重要。非常简单的例子(首选 MATLAB)将是我最好的开始。

matlab image-processing projection medical tomography-reconstruction
5个回答
7
投票

你有不同的例子:

  • 这里有一个与3d Cone Beam相关的Matlab示例。这可能是一个很好的起点。
  • 这里您还有另一个操作员
  • 这里您可以简要了解距离驱动方法。所以使用第一个例子和本书中的解释,你可以获得一些想法。

如果没有,您可以随时转到距离驱动运算符paper并使用第一个示例来实现它。


5
投票

据我所知,距离驱动投影仪/背投仪没有免费的实现(它已获得专利)。不过,您可以自己编写代码,不会有太大困难。

首先阅读论文并了解投影仪正在做什么。您只需要几个关键部分:

  • 将像素边界投影到轴上。
  • 将探测器边界投影到轴上。
  • 重叠内核。

前两个是简单的几何图形。论文中对重叠内核进行了详细描述(并且大部分是可用的伪代码)。

请注意,您最终不会得到执行投影的实际矩阵。除了最小的例子之外,该系统对于所有的例子来说都太大了。相反,您应该编写一个函数来实现与距离驱动投影相对应的线性运算符。


2
投票

虽然已经有很多令人满意的答案,但我想提一下,我已经在 MATLAB 上实现了 2D 计算机断层扫描 (CT) 和 3D 数字乳房断层合成 (DBT) 的距离驱动方法。

到目前为止,对于 2D CT,这些代码可用:

对于 3D DBT:

注意

1 - DBT 代码严格适用于有限角度断层扫描;然而,扩展到完整的旋转角度是很简单的。

2 - 所有代码都是针对CPU实现的。

请报告代码上的任何问题,以便我们不断改进。


1
投票

现有 MATLAB 中未实现距离驱动投影。对于正向投影,有 fanbeam() 和 radon() 命令,具体取决于您要寻找的几何形状。我不认为 fanbeam 很好。从 R2013a 开始,它表现出非线性行为,请参阅此处了解详细信息

对于匹配转置,无论是扇形束还是平行几何体都没有相应的功能。请注意,iradon 和 ifanbeam 是匹配转置的 not 运算符实现。但是,您可以考虑使用FUNC2MAT。它将让您将任何线性运算符从函数形式转换为矩阵形式,然后您可以自由转置。


0
投票

也许有点晚了,但距离驱动方法的作者 Bruno De Man 博士已经开源了 XCIST 包中的 C/C++ 实现:https://github.com/xcist/main

© www.soinside.com 2019 - 2024. All rights reserved.