CT图像重建算法------射线驱动投影模型

article/2025/10/10 13:50:31

在模拟CT扫描过程中被测物体保持静止不动,射线源与探测器绕Z轴做逆时针旋转,每隔一定角度进行一次投影数据的计算,而计算方法则取决于采用什么样的投影算法。本文主要介绍了投影算法的分类,并详细描述了射线驱动算法中的joseph算法原理。

一、图像重建算法分类

CT图像重建算法主要有3类:1、反投影法;2、迭代重建算法;3、解析法:包括滤波反投影法和傅里叶变换法

二、迭代重建算法分类

迭代重建算法在求解的过程中需要不断地求解矩阵元素,目前系统矩阵的建模方式主要分为4种,分别为
(1)像素驱动模型(2)射线驱动模型(3)距离驱动模型(4)面积积分模型。

(1)像素驱动模型(PDM)通常应用在FBP重建反投影的计算;

(2)射线驱动模型(RDM)多用于迭代算法中的正向投影算法,这种模型下,射线不再看作是
有宽度的,它的原理是通过对射线经过的像素进行加权求和来模拟线积分;
  包括:Joseph算法(使用线性插值)、Siddon算法(使用临近插值,也是射线驱动模型中最经典算法)
  其中Joseph算法使用线性插值模型,其重建质量比Siddon算法要理想,但由于计算量大导致重建速度较慢。

(3)距离驱动模型(DDM)相较于前两种模型较为先进。这种模型下考虑到了像素与探测器单
元的宽度。另还有改进的距离驱动模型(IDDM);

(4)面积积分模型(AIM)将射线穿过像素时与像素单元边界形成的图形面积作为权
因子。
本文主要介绍迭代重建算法中射线驱动模型中

三、Joseph算法原理

Joseph’s method即约瑟夫方法,是射线驱动模型下的一种前向投影算法,通过对射线经过的像素进行加权求和来模拟线积分。

1、二维Joseph算法

为了方便理解我们可以先从二维角度观察算法原理,如下图所示为joseph算法的二维原理图。
在这里插入图片描述
                 图1 Joseph算法基本原理图
算法主要根据焦点(也就是光源)与探测器每一个像素的中心两点所建立的光线斜率判断插值方式。Joseph利用线性插值,对于三维情况就是双线性插值。线性插值方式分为在X轴上插值和在Y轴插值两种。判断方法为:
若射线更平行于Y轴,则在Y轴上求和,在X轴上插值。也就是在X轴上投影,最后在Y轴方向求和。
反之,若射线更平行于X轴,则在X轴上求和,在Y轴上插值。也就是在Y轴上投影,最后在X轴方向求和。如图2
在这里插入图片描述
                     图2 Joseph算法在Y轴上投影的情况

数学上判断方式有很多,比如:方法1,计算焦点和当前探测器像素中心点两点的斜率;方法2,计算两点X和Y坐标的插值,比较他们的大小关系,若|xs-xd|<=|ys-yd|,则在X轴插值,若|xs-xd|>|ys-yd|,则在Y轴插值。图1就是在X轴插值的情况。根据插值方式,也就是插值坐标,就开始进行插值计算了。
二维情况下,重建图像被看作一个给定大小的网格像素图像(m*n)。像素大小为p,当射线穿过重建区域时,穿过图像的射线附近像素对其有影响,只考虑这些像素的衰减作用,其他像素对该射线的衰减无贡献。这个贡献称为权重因子,也就是线性插值过程所得的结果。具体过程为(以X轴插值为例):
(1)判断相交,寻找交点
首先确定采样角以及所要使用的探测器像素确定射线L,而后判断L是否与重建区域相交,若相交,相交在哪一层像素的中心点所在平面上,并求出交点坐标。
判断相交的方式为遍历重建区域每一层像素中心点平面,也就是每一层中心点的纵坐标,判断射线是否与当前遍历的层相交,若相交则求出交点坐标,若不想交则继续遍历下一层。
(2)计算权因子
对于有交点的那一层,例如图1中最后一层,计算交点与相邻两个像素中点的距离占总距离的比值,分别为wl/deta和(deta-wl)/deta,即为公式3中的两个权因子:
在这里插入图片描述
其中f(Xk(l),Yl)×较小的距离,而右侧的像素衰减值却乘以较大值,这是因为交点越接近一个像素点时,认为该像素对该路径的贡献越大,所以是反向相乘的。
式中前面的为比例因子,是一个雅可比矩阵,其中的deta表示相邻两个像素中心之间的距离,cos值为采样角的余弦值
(3)
  当某一采样角度下,当前探测器像素对应的射线在某一层的插值结算结束后,即寻找下一个相交的层继续计算;
  当所有层遍历结束后,转换到下一个探测器像素,继续以上步骤;
  当所有探测器像素均计算完毕后,就继续下一个采样角度的所有计算。
  至此,一个简单的二位Joseph算法过程执行完毕。

2、三维Joseph算法

三维算法基本的原理与二维是保持一致,只是需要加上一个Z方向产生的分量。
与二维不同的需要修改的部分:
(1)以在X轴上投影的一个情况作为例子,如图3所示。
在这里插入图片描述
                 图2 三维Joseph算法原理
对于三维情况,一条射线产生的权重因子需要由两个角度的因子共同决定,例如图2所示的情况下,分别需要XOY平面和YOZ平面求得的插值,如图3所示,而后将两个平面得到的插值进行乘积得到最终的三维插值结果
在这里插入图片描述
                 图4 X轴插值情况的两个视角
(2)对于最后的投影值的公式
需要将最前面的比例因子修改为deta/(cos(xoy)*cos(yoz)),三维公式大致为:
Alt
注意:
1、由于我们模拟的是锥束投影,因此所说的投影角是每一个采样角度下焦点与探测器中心连线的旋转角度,而当前采样角度下整个探测器的其他像素块所对应的射线角度并不是投影角,所以最后求得的权因子需要再除以探测器每一个像素对应射线的角度的余弦值。
2、对于三维Joseph算法,在X轴投影时,需要XOY和YOZ两个平面;而在Y轴上投影时,需要YOX和ZOX两个平面的插值结果。
3、边界问题处理一定分清楚情况,确定好极限位置
在判断射线是否与重建区域相交时,需要考虑边界的极端情况,比如图1中第一行,交点位置已经超出重建区域,此类极端情况根据项目需求可以自行设定,一般的处理方式是,若交点超出重建区域的边界,但超出区域在半个像素内,仍然保留交点,继续计算。

四、Siddon算法

Siddon算法整体计算结构与Joseph算法基本一致,仅仅是在计算权重因子时有略微的区别。
在Siddon算法中,每个像素对于投影的贡献由像素内射线长度决定,例如下图射线与重建区域的相交情况:
在这里插入图片描述
此时,投影值P可以表示为:
在这里插入图片描述

五、 坐标系建立

在这里插入图片描述


http://chatgpt.dhexx.cn/article/nPXAvwWM.shtml

相关文章

尤雨溪告诉你为什么Vue比yox优秀

2019年6月8日来自全球各地的开发者齐聚上海交通大学文治堂&#xff0c;VueConf 2019 在上海成功举办。 VUE 3.0 最新进展 更快 使用 Object.defineProperty -> Proxy 速度 提升了1倍 VUE3.0 将 Virtual DOM 重构 速度 提升 6 倍 牛逼吧 &#xff01;&#xff01;&…

kubernetes的初认识

1.先谈容器。 一个“容器”&#xff0c;实践上是一个由Linux Namespace、Linux Cgroups 和 rootfs 三种技术构建出来的进程的隔离环境。 一个正在运行的linux容器&#xff0c;其实可以被“一分为二”地看待&#xff1a; 一组联合挂载在/var/lib/docker/overlay2下的rootfs&a…

KubeSphere简介,功能介绍,优势,架构说明及应用场景

目录 一、KuberSphere简介 1.1 功能介绍 1.2 Kubernetes 资源管理 1.3 微服务治理 1.4 多租户管理 1.5 DevOps 工程 1.6 Source to Image 1.7 多维度监控 1.8 自研多租户告警系统 1.9 日志查询与收集 1.10 应用管理与编排 1.11 基础设施管理 1.12 多存储类型支持…

云原生钻石课程 | 第4课:Kubernetes存储架构原理深度剖析(上)

点击上方“程序猿技术大咖”&#xff0c;关注并选择“设为星标” 回复“加群”获取入群讨论资格&#xff01; 本篇文章来自《华为云云原生王者之路训练营》钻石系列课程第4课&#xff0c;由云原生存储解决方案Everest2.0的架构设计专家Jabin主讲&#xff0c;详细介绍云原生存储…

1.k8s基本使用(测试加分)

测试为什么要学习容器技术及k8s k8s不是运维的专属技术 随着互联网技术的发展&#xff0c;架构也已经从单体架构发展到容器云( “微服务 k8s” 完美结合) 很多人认为&#xff0c;k8s只是运维需要掌握的技术&#xff0c;讲真&#xff0c;测试和运维、开发都有技术交集 所以&…

Kubernetes 持久化存储(Pod Volumes,PV和PVC)

一、Volumes 介绍 Pod Volumes 首先来看一下 Pod Volumes 的使用场景&#xff1a; 场景一&#xff1a;如果 pod 中的某一个容器在运行时异常退出&#xff0c;被 kubelet 重新拉起之后&#xff0c;如何保证之前容器产生的重要数据没有丢失&#xff1f;场景二&#xff1a;如果…

面试题引出的知识点整理

1、自旋锁&可重复锁&公平锁&共享锁&分段锁你都知道吗? 2、无锁&偏向锁&轻量级锁&重量级锁如何膨胀升级? 3、Lock底层AQS实现与Synchronized底层实现异同&#xff1f; 4、LongAdder的分段CAS优化机制如何设计的&#xff1f; 5、Java多线程内存模型…

云集成,给超大规模K8s运维带来的丝滑体验

根据IDC统计&#xff0c;未来五年容器基础架构软件市场将以超过40%的复合增长率爆发式增长&#xff0c;行业也从互联网向更多的传统行业渗透&#xff0c;比如金融、政府、电信&#xff0c;制造和能源等行业。 近年来&#xff0c;随着云技术的日益普及&#xff0c;越来越多的企…

Spring

目录 1.spring介绍 spring中的两个核心概念 1.1 IoC 1.2 AoP 1.3 Spring的优点 1.4 Spring工程构建 1.4.1 Maven Spring 依赖 1.4.2 Spring核心配置文件编写 1.4.2.1 完成控制反转以及依赖注入 1.4.2.2 测试 1.4.2.3 Spring中的IOC 产生的对象是否是单例模式 1.5 B…

动静分离 与 热点缓存

动静分离 让系统“快”起来&#xff1a;1、提高单次请求的效率2、减少没必要的请求 “动静分离”就是瞄着这个大方向去的。所谓“动静分离”&#xff0c;其实就是把用户请求的数据&#xff08;如HTML页面&#xff09;划分为“动态数据”和“静态数据”。简单来说&#xff0c;“…

天猫浏览型应用的CDN静态化架构演变

转载自&#xff1a;http://zhu-zhiguo.iteye.com/blog/2145496 在天猫双11活动中&#xff0c;商品详情、店铺等浏览型系统&#xff0c;通常会承受超出日常数倍甚至数十倍的流量冲击。随着历年来双11流量的大幅增加&#xff0c; 每年这些浏览型系统都要面临容量评估、硬件扩容、…

java 确保线程安全_确保不安全感

java 确保线程安全 33岁的克雷格斯宾塞&#xff08;Craig Spencer&#xff09;在治疗埃博拉病毒患者后于10月17日从非洲返回美国。 几天后&#xff0c;他的埃博拉病毒呈阳性React。 每个人&#xff08;尤其是周围的人&#xff09;和纽约人都感到关切。 纽约市市长走到媒体前&am…

经验:一个秒杀系统的设计思考

前言 秒杀大家都不陌生。自2011年首次出现以来&#xff0c;无论是双十一购物还是 12306 抢票&#xff0c;秒杀场景已随处可见。简单来说&#xff0c;秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程。 从架构视角来看&#xff0c;秒杀系统本质是一个高性能、高一…

Java调用C++/C

Java调用C/C有3中方式&#xff1a;JNI、JNA、JNative。 注&#xff1a;1、个人觉得还是JNA的方式最好。 2、Java和C/C交互的难点在于数据结构的对应 3、java不可以直接调用C#代码&#xff0c;C#代码需要托管 JNI &#xff08;Android调用&#xff0c;普通java类似&#xff09;…

kubernetes 静态存储与动态存储

静态存储 Kubernetes 同样将操作系统和 Docker 的 Volume 概念延续了下来&#xff0c;并且对其进一步细化。Kubernetes 将 Volume 分为持久化的 PersistentVolume 和非持久化的普通 Volume 两类。为了不与前面定义的 Volume 这个概念产生混淆&#xff0c;后面特指 Kubernetes …

Java多线程整理

目录 1. 进程与线程 1.1 进程 1.2 线程 1.3 并发与并行 2. 多线程 2.1 多线程的概念 2.2 多线程的好处 2.3 主线程 3. 线程的创建与启动 3.1 继承Thread类 3.2 实现Runnable接口 3.3 实现Callable接口 3.4 run方法调用和start调用的区别 4.线程的状态 4.1 线程状…

th和td标签的区别

th和td标签的区别 开发工具与关键技术&#xff1a; Dw HTML 作者&#xff1a;邹贺汗 撰写时间&#xff1a;2019年2月4日 在写这篇文章的时候我就知道虽然我发的不是第一个&#xff0c;但是说不定我写刚好给有需要的人看到了呢&#xff0c;所以我就写了这篇文章&#xff0c;下面…

html中th标签添加方法,HTML th 标签

HTML 标签 标签表示HTML表格的表头部分&#xff0c;该标签中的内容会以粗体显示&#xff0c;请参考下述示例&#xff1a; 实例 一个简单的 HTML 表格&#xff0c;带有两个表头单元格和两个数据单元格&#xff1a; MonthSavingsJanuary$100 尝试一下 (更多实例见页面底部) 浏览…

thymeleaf标签之th:href的使用

项目中使用springboot来进行开发&#xff0c;自然也就接触到了thymeleaf这套模板&#xff0c;如果你对c标签很熟悉的话&#xff0c;我觉得上手这个应该是很快的。 介绍下th:href在项目中的使用。 它的写法与th:src一样 一般写法为th:href"{值}" 如果是需要从model…

使用thymeleaf时,th:类标签失效的原因

问题出现&#xff1a; 最近学习后端&#xff0c;学到了thymeleaf这一块&#xff0c;学习中出现了一个问题我没有注意到&#xff0c;导致后面页面编写出现重大bug&#xff1a;项目中我使用了thymeleaf&#xff0c;配置的映射路由为&#xff1a;/index&#xff0c;访问首页的时候…