我正在尝试使用 MATLAB 实现 CT(计算机断层扫描)投影算子 A,我认为它也经常被称为“系统矩阵”。
基本上,对于 N x N 图像 M,可以通过将投影算子与图像相乘来获得投影数据 P:
P = 上午
并且可以通过将投影算子的(共轭)转置乘以投影数据来执行反投影过程:
M = A'P
有人对如何实现矩阵 A 有任何想法/示例/示例代码(例如:Radon 变换)吗?如果可能的话,我真的很想从一个小尺寸的矩阵开始,比如 8 x 8 或 16 x 16。
我的问题实际上是:如何实现投影算子,这样通过将算子与图像相乘,我可以获得投影,并且通过将算子的(共轭)转置与投影相乘,我可以获得原始图像回来了。
编辑:
特别是,我想实现距离驱动的投影仪,在这种情况下光束轨迹(平行、扇形等)并不重要。非常简单的例子(首选 MATLAB)将是我最好的开始。
据我所知,距离驱动投影仪/背投仪没有免费的实现(它已获得专利)。不过,您可以自己编写代码,不会有太大困难。
首先阅读论文并了解投影仪正在做什么。您只需要几个关键部分:
前两个是简单的几何图形。论文中对重叠内核进行了详细描述(并且大部分是可用的伪代码)。
请注意,您最终不会得到执行投影的实际矩阵。除了最小的例子之外,该系统对于所有的例子来说都太大了。相反,您应该编写一个函数来实现与距离驱动投影相对应的线性运算符。
现有 MATLAB 中未实现距离驱动投影。对于正向投影,有 fanbeam() 和 radon() 命令,具体取决于您要寻找的几何形状。我不认为 fanbeam 很好。从 R2013a 开始,它表现出非线性行为,请参阅此处了解详细信息
对于匹配转置,无论是扇形束还是平行几何体都没有相应的功能。请注意,iradon 和 ifanbeam 是匹配转置的 not 运算符实现。但是,您可以考虑使用FUNC2MAT。它将让您将任何线性运算符从函数形式转换为矩阵形式,然后您可以自由转置。
也许有点晚了,但距离驱动方法的作者 Bruno De Man 博士已经开源了 XCIST 包中的 C/C++ 实现:https://github.com/xcist/main