医学CT成像的迭代算法 SART和OS-SART算法

2024-02-05 15:12

本文主要是介绍医学CT成像的迭代算法 SART和OS-SART算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

医学CT成像的迭代算法 SART和OS-SART算法

  • 前言
  • 论文连接
  • 任务描述
  • SART
  • OS-SART

前言

由测量得到的投影数据恢复到真实的CT图像,这一任务目前分为两类算法,第一种就是以反向投影FBP为主的算法,第二类则是迭代的算法(IR),本文所提到的SART和其改进版本OS-SART均为迭代算法,即需要一定的运算时间。

对于算法的证明与解析本文并不涉及,只是单纯从下面这篇论文中翻译对应的部分罢了。因为发现网上对于OS-SART的解析甚少。

论文连接

论文连接An Improved Ordered-subset Simultaneous Algebraic Reconstruction Technique

任务描述

这本质上是一个图像的重建问题,即从投影图像到真实图像的一个映射,其映射的关系需要我们重建出来,对真实模型进行合理简化,整个任务可以描述为一个线性系统:

R x = y (1) \bold{R}\bold{x}=\bold{y}\tag{1} Rx=y(1)

其中 y = ( y 1 , y 2 , . . . , y l ) T y=(y^1, y^2, ..., y^l)^T y=(y1,y2,...,yl)T是测量得到的投影数据, x = ( x 1 , x 2 , . . . , x J ) T x=(x_1, x_2, ..., x_J)^T x=(x1,x2,...,xJ)T是我们不知道的真实图片(也是要求的),我们认定 R = ( r i j ) I × J \bold{R}=(r_{ij})_{I\times J} R=(rij)I×J是响应矩阵(response matrix), r i j r_{ij} rij表示了第j个像素与第i条射线交线的长度,因此 r i j r_{ij} rij是非负的。需要注意,大部分像素并不与射线相交,故 R \bold{R} R实际上非常稀疏。

SART

算法公式如下:
x j ( l + 1 ) = x j ( l ) + λ l ∑ i = 1 I r i j R + , j ( y i − R i x ( n ) ) R i , + (2) x_j^{(l+1)} = x_j^{(l)} + \lambda_l\sum_{i=1}^I\frac{r_{ij}}{R_{+,j}}\frac{(y^i - R^ix^{(n)})}{R_{i,+}}\tag{2} xj(l+1)=xj(l)+λli=1IR+,jrijRi,+(yiRix(n))(2)
R i , + = ∑ j = 1 J ∣ r i j ∣ , i = 1 , 2 , . . . , I {R_{i,+}} = \sum_{j=1}^J|r_{ij}|, i=1, 2, ..., I Ri,+=j=1Jrij,i=1,2,...,I
R + , j = ∑ i = 1 I ∣ r i j ∣ , j = 1 , 2 , . . . , J R_{+,j}= \sum_{i=1}^I|r_{ij}|, j=1, 2, ..., J R+,j=i=1Irij,j=1,2,...,J

其中 R i R^i Ri是矩阵 R R R的第i行, λ l \lambda_l λl是对第 l l l次迭代的松弛系数。该方法实际是Landweber方法对于 R x = y Rx=y Rx=y的最小二乘解的收敛。

OS-SART

为了加速SART的迭代速率,该方法实际上可以理解为把原来一个大的计算分为好几个子集进行迭代。具体算法也是如此。

令投影数据为 y = ( y 1 , y 2 , . . . , y l ) T y=(y^1, y^2, ..., y^l)^T y=(y1,y2,...,yl)T,将这些投影数据分配到几个有序集合中: S 1 , S 2 , . . . , S T S_1, S_2, ..., S_T S1,S2,...,ST,其中 T T T是设定好是OS等级(OS level,大概意思就是要分几组),于是算法可以写成以下形式:

x j ( l + 1 ) = x j ( l ) + λ l ∑ i ∈ S [ l ] r i j ∑ i ∈ S [ l ] ( y i − R i x ( n ) ) R i , + (2) x_j^{(l+1)} = x_j^{(l)} + \lambda_l\sum_{i\in S_{[l]}}\frac{r_{ij}}{\sum_{i\in S_{[l]}}}\frac{(y^i - R^ix^{(n)})}{R_{i,+}}\tag{2} xj(l+1)=xj(l)+λliS[l]iS[l]rijRi,+(yiRix(n))(2)

其中 [ l ] = l ( m o d T ) + 1 , l ≥ T [l]=l(mod T)+1, l\geq T [l]=l(modT)+1,lT.

这篇关于医学CT成像的迭代算法 SART和OS-SART算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/681313

相关文章

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

C++迭代器失效的避坑指南

《C++迭代器失效的避坑指南》在C++中,迭代器(iterator)是一种类似指针的对象,用于遍历STL容器(如vector、list、map等),迭代器失效是指在对容器进行某些操作后... 目录1. 什么是迭代器失效?2. 哪些操作会导致迭代器失效?2.1 vector 的插入操作(push_back,

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时