1

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

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

P = 上午

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

M = A'P

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

我的问题真的是:如何实现投影算子,这样通过将算子乘以图像,我可以得到投影,并且通过将算子的(共轭)转置与投影相乘,我可以得到原始图像.

编辑:

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

4

4 回答 4

7

你有不同的例子:

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

如果没有,您始终可以转到距离驱动操作员文件并使用第一个示例来实现它。

于 2014-01-15T09:50:18.923 回答
5

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

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

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

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

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

于 2014-01-18T02:16:04.910 回答
2

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

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

对于3D DBT:

请注意

1 - DBT 的代码严格用于有限角度断层扫描;然而,它很容易扩展到一个完整的旋转角度。

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

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

于 2019-05-19T21:09:11.050 回答
1

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

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

于 2014-01-14T16:03:48.253 回答