图片缩略图

三维锥形束CT (CBCT)投影反投影fk,迭代重建Matlab实例

版本1.14 (172 KB) Kyungsang金
三维锥形束CT (CBCT)投影反投影fk,迭代重建Matlab实例
4.8
33评级

40下载

更新2016年2月25日

视图版本历史

查看许可协议

本程序是关于平面探测器的三维锥束CT。
这是为开始学习CT医学成像的学生设计的。
GPU选择:
-我提供使用内置GPU函数的投影,反投影代码(半GPU代码)
-需要Matlab 2013b以上版本的并行计算工具箱。
-你可以打开/关闭GPU的使用。
—该代码的计算时间比基于cpu的代码快几倍。速度取决于你的GPU。

例子:
- FDK(称为滤波反投影)
-最大似然期望最大化,
- SART(同时代数重建技术)
SQS(可分离二次代理)。

您可以运行:
0.请检查“ParamSetting。仔细m”。
1.进行测量:m: F5
可以施加泊松噪声。
2.重建的例子
2.1 FDK
2.2 MLEM
2.3迴旋
2.4 SQS

请参阅:https://onedrive.live.com/redir?resid=4599730E4EF6090E ! 4249 &authkey = !cpdf AJPJM8_qtvrhuGc&ithint =文件% 2

谢谢你!

引用作为

Kyungsang金(2021)。三维锥形束CT (CBCT)投影反投影fk,迭代重建Matlab实例(//www.tatmou.com/matlabcentral/fileexchange/35548-3d-cone-beam-ct-cbct-projection-backprojection-fdk-iterative-reconstruction-matlab-examples), MATLAB中央文件交换。检索

意见及评分(66

Meysam Tavakoli

瞿志远

xuanhao

哇哇,非常感谢!这对我帮助很大!

孟蜀

Ruk李

非常感谢你的代码。
你能解释一下投影的算法吗?m文件?

米莎希拉里奥

Hi Kyunsang img28在哪里?垫文件?

亨徐

反正知道怎么处理龙门倾斜的情况?

Tengiz油田Lobzhanidze

(音

romdhane hamida

如何在MLEM重建后可视化三维体?

Thinh声称阮

斯科特Moroch

如果我有一组2D投影,我如何将这些图像转换为“img128。m”数据文件吗?

约翰•霍夫曼

超级有用的代码。用我自己的数据第一次就能运行并重建。从不得不执行FDK从零开始!与所有重构代码一样:在尝试进行重构之前*首先*阅读文档,以便了解代码是如何配置的。了解你的几何和CT几何。

Nadim Abrar

我如何运行这段代码?我的CUDA驱动程序或GPU设备不正确。

艾米·贝克尔

从x射线源到探测器的中心射线的位置输入到Matlab代码的哪里?这将是探测器上的像素位置[垂直和水平位置]

梁xiaokun

fkreuz

嗨,我如何从我自己的2D图像制作img。谢谢你!

lei邓

语tekchandani

它是身体的哪个部分?

121

克里斯托弗岩石

要使用这个包,
1.将ZIP文件解压到一个文件夹中,并将该文件夹添加到您的路径中。
2.运行MeasurementGen()。这将创建程序。垫file which is missing when you try to run the other files.

Hany沙尼

嗨,我似乎找不到主要的演示。M代码,有人能建议吗?
谢谢
Hany

卡拉·罗马诺

我输入一个矩阵138*157*101。运行MeasurementGen的唯一方法。M是设置参数x=157和y=138。是正常的吗?在那之后,代码返回投影给了我这个错误
反投影误差(第25行)
卷(:,:,工业区)=(比例。* interp2(项目、pu、pv param.interptype));
有人能帮我吗?

Ka Mirul

你好,Aubrey,你应该将你的投影图像转换为双数据或单数据格式。当你有图像输入,你可以使用imread,然后堆叠成3D数据。

奥布里Kelley-Cogdell

你好所有的,
我应该以什么格式插入'img' ?
我有一系列的二维图像投影作为TIF

Matheus席尔瓦

你好,Kyungsang金!

您能给我参考一下您研究如何实现MLEM的论文吗?

提前谢谢。

hyt 1220

谁知道这份文件指的是哪篇论文?

yiyuchentang

谢谢你的代码!
这对我很有帮助!

dect

不错的计划。想知道filter .m中的下面一行

项目(:,:我)= fproj(端/ 2-param.nu / 2 + 1:端/ 2 + param.nu / 2:) / 2 / param.du *(2 *π/ param.nProj) / 2 * (param.DSD / param.DSO);

你能解释为什么我们需要最后几项而不是fproj(end/2-param.nu/2+1:end/2+param.nu/2,:)吗?

谢谢,

西格丽德

katamaran

谢谢你的代码。
有光束硬化校正算法吗?

周勃

投影x射线是单能谱还是多能谱,那么kVp和mAs又是什么呢?

非常感谢

黄YanYan

好工作!另外,我想知道您是否能告诉我您的工作是指哪一篇论文?

μ太阳

好的代码。

还Biguri

注意,当达到45度的垂直边缘时,投影实现有一个渐近递增的误差。这是因为投射和反投射的方法是“拉伸”图像,将圆锥体转换为平行体,从而使最近的单个体素(45)非常宽。你可以用45度角的全白色“立方体图像”来测试这一点。出现奇怪的工件。距离图像中心越近,这一点的相关性就越小。工具箱对于了解医学成像仍然很有用,但这个错误(不幸的是)使它不是用于研究目的或真实图像重建的好工具箱。

尼克徐

您需要运行MeasurementGen。M首先生成project .mat。如果proj。Mat在文件夹中预先生成。谢谢。

尼克徐

你的项目在哪里?垫文件?找不到吗?

法Z

亲爱的庆尚,我可以问两个问题吗?
1-在评论中你提到了第96页《江榭》第二版;然而,我不能在投影中遵循代码。M,即它如何表示公式3.59。你能给我一些提示吗?
2-我们如何从一个病人的CT图像到您提供的样本文件?
谢谢你!

GERARDO拉米雷斯

yw628

抱歉我弄错了,我找到了project .mat

yw628

你好,

项目在哪里。垫文件?

迪戈加西亚岛

很好的贡献,非常感谢你的代码。

阿里Meghoufel

阿里Meghoufel

对他人的伟大贡献!
谢谢金京尚!

安东

很酷的!感谢您提供的代码!我尤其喜欢看真实的幻影和动画重建。

刺毛

谢谢京:-)

Kyungsang金

嗨刚毛,

请按以下要求做:

1)打开“ParamSetting.m”
2)修改为param。gpu = 0 "

那么,请再试一次。
该选项需要“并行计算工具箱”和“GPU(硬件)”,
如果您有GPU,请检查GPU的内存和核数。
此外,它将在2013b版本以上有用。

刺毛

谢谢你的代码。是否有一个描述文件来解释每个文件做什么以及如何运行代码?

当我运行Recon1_FDK或MeasurmentGen时,它们都会出现错误,说某个文件或函数缺失或未定义。更具体地说,当运行Recon1_FDK时,错误建议proj。垫does not exist and when I run MeasurementGen the error suggest gpuArray (called in Projection.m) is undefined.

非常感谢您的帮助。

Mahdjoub哈姆迪

贝拉

有可能使用这个程序向前投射一个dx=dy,但是dx=dy!=dz的3D图像吗?现在,我的参数是:

%%参数设置%%

参数。nx = 400;
参数。纽约= 400;
参数。新西兰= 66;

%探测器面板真实像素密度(像素数)
参数。ν= 400;
参数。nv = 400;

%探测器设置,根据瓦里安三部曲OBI(真实尺寸)
参数。苏= 350;%毫米
参数。sv = 350;%毫米

x射线源和探测器设置
参数。DSD = 1500;%源到检测器的距离
参数。DSO = 1000;x射线源到物体轴的距离

这个令人困惑的东西
res = (param.DSO / param.DSD) * (param.su / param.nu);
% (1000/1500) * (350/400)
参数。sx = param.nx *物;%毫米
参数。sy = param.ny *物;%毫米
参数。深圳= param.nz *物;%毫米

但这并不能创造出正确的正向预测,到目前为止,我已经能够检查。我在尝试做一些在图像处理中不可能的事情吗?

谢谢你!

罗摩·泰佳

请包括解析方程以便更好地理解。或者请解释一下投影m中的算法。如果可能,请包括解析方程的参考文献

Kyungsang金

嗨,埃里克,

说得好。

该因子被用于扇形光束和锥形光束的加权反投影。
(见蒋谢第二版,图3.35(理性)和3.37(几何))

在真实几何中,由于CT旋转360度(平均因子~ 1)和自身都接近于1,因此该因子对图像并不是关键因子。

但是,我想我为了快速计算而省略了它,很快我会修正它的准确性。

非常感谢。

Ps)你可以直接发电子邮件给我,有时很难在这里查看评论。

埃里克

嗨,我比较了你的工作与一些论文中的FDK方程,似乎你的FDK算法省略了一个因子。我在“反向投影”中添加了这个因素。M”的算法,代码如下所示。

比率= param.DSO。^ 2. / (param.DSO-ry)。^ 2;
卷(:,:,工业区)=比率。* interp2 (uu、vv项目”,pu、光伏、“线性”);

你认为有必要加上这个因素吗?等待您的回复,谢谢。

Kyungsang金

你好埃里克,

第一个问题:

如果你有真实的投影(“RealProj”),那么首先计算:

1.I0 = max (RealProj (:));如果你不知道的话
2.项目=日志(RealProj / I0);

此处“I0”为教材中提到的空白图像(源强度)。
如果你认为最终的图像有问题,请检查1)"RealProj"有0值或2)“I0”比背景值高。

解决方案的情况下

1)第3步。项目(isinf(项目))= 0;

2)步骤1。定义I0为背景(高强度)平均值。
步骤2。项目=日志(min (RealProj /钱数,1));

然后,您可以像Demo.m中那样执行FDK或MLEM。

第二个问题:

参数设置非常重要。图像分辨率由探测器的大小和DSO的距离来定义。在你的情况下,DSD是700,DSO是560。所以比例是560/700 = 0.8。检测器的像素大小为50/1024,体素的最大分辨率为50/1024*0.8。

现在,体素分辨率“dx=dy=dz”被定义了。然后定义覆盖整个图像的体素数量(nx, ny, nz)。
因此,sx = nx*dx, sy=ny*dy, sz=nz*dz;

最后一个问题:
为了快速计算,我修改了一下。但如果你能看看蒋谢的书(第二版,第96页),就很容易理解了。

谢谢,

埃里克

谢谢你的回答。我还有几个问题要问。
如果我已经得到了x射线成像系统的真实投影,例如,我得到了一只老鼠的投影,我还需要做“CTprojection”吗?在这种情况下,如果我只需要做“CTbackprojection”,如何设置重建对象的以下参数:nx, ny, nz, sx, sy,和sz。
检测器的参数设置如下:
param.su = 50; %毫米
param.sv = 50; %毫米
param.nu = 1024;
param.nv = 1024;
param.DSD = 700;
param.DSO = 560;

最后一个问题,关于不使用等中心(DSO)域的FDK算法,您能给出一些参考吗?

谢谢你!

Kyungsang

你好埃里克,

1.w = cos(theta),为了计算w,我的代码考虑了探测器的距离,正如你的评论,许多书在等中心(DSO)域计算。在这种情况下,uu和vv的计算应该考虑源与中心的距离比和源与探测器的距离比。请考虑等中心线与延长线源体素检测器之间的夹角。

2.在我的代码中,pi/2旋转移位是为了精确计算你的注释。"interp2"函数可产生旋转90度的图像。我写了角->角- /2,我认为DSO+ry是对的。

3.如果你想获得真实的投影数据,首先设置空白扫描强度“b”,这与“剂量”有关,然后测量M = b*exp(-投影(obj))。

谢谢你的评论。

埃里克

我想知道如果我有真实的投影图像,是否需要使用“CTprojection”功能?

埃里克

良好的工作。我有几个问题。
首先,在“反投影”的文件中。m”,设置“w = (param.DSD)。/√(param.DSD) ^ 2 + uu。^2+ vv.^2);”,但在很多书中,他们说w应该设为“w = (param.DSO)./根号(param.DSO)^2+uu”。^ 2 + vv。^ 2);”。你能给我一个理由吗?
其次,也是在“反投影”中。m”,我认为rx, ry, pu, pv的描述应该是:
rx = xx。* cos(角)+ yy。* sin (angle_rad);
ry = - xx。* sin(角)+ yy。* cos (angle_rad);
聚氨酯= rx。* (param.DSO)。/ (param.DSO-ry);
pv = param.zs(工业区)* (param.DSO)。/ (param.DSO-ry);

你能给我一些建议吗,谢谢。

Kyungsang金

嗨,Masoud Hashemi
这个程序是平面探测器,
我觉得你应该修改一下弧线探测器的几何形状,
谢谢你使用我的软件。

Masoud Hashemi

我想知道投影函数是用于Arc探测器(第三代)还是Flat探测器?

大本

太棒了!

ljpzgx

代码可以运行,但结果不是很好,你可以上传你参考代码的参考资料,这样我们可以清楚地了解。谢谢你!

Kyungsang金

这个程序和其他程序相似,但是
快得多。

加快速度,
(1)将重建对象和投影图像定义为“单一”精度,
然后(2)使用matlabpool。

Kyungsang金

你可以使用"matlabpool"

因为我= 1:n(角)
投影和投影
结束

parfor i = 1: n(角)
投影和投影
!!请删除图形绘图功能
结束

这使四核的性能提高了两倍以上。

Kyungsang金

请更改函数代码"projection_pixel.m":

/√((SAD+SDD)^2 + uu. /√(SAD+SDD)^2 + uu. /√(SAD+SDD)^2 + uu. /√(SAD+SDD)^2 + uu。^ 2 + vv。^ 2)* abs (y (2) y (1));

dist =√((SAD+SDD)^2 + uu。^ 2 + vv。^ 2)。/ (SAD + SDD) * abs (y (2) y (1));

谢谢你,:)

MATLAB版本兼容性
创建R2013b
与任何版本兼容
平台的兼容性
窗户 macOS Linux

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!