当前位置: 首页 > news >正文

MATLAB环境下CT图像环形伪影一键修复工具集(含中心定位、极坐标变换与多算法去环)

本文还有配套的精品资源,点击获取

简介:专为CT重建图像设计的环形伪影处理工具集,全部基于MATLAB开发,开箱即用。支持EDF、TIFF、FITS等多种常见格式读取,内置kill_rings_V8、remove_rings、dj_remove_rings_v3等主流去环算法,覆盖不同噪声强度和环结构特征。提供环中心自动定位(CenterDetermination)、极坐标重采样(polartrans)、Hough圆检测(CircularHough_Grd)辅助校准、交互式阈值调节(thresh_tool)、平场校正(flatfield)以及批量序列预处理(sequence_clean、sequence_flatfield)等功能。适配常规CT投影数据与断层重建图像,可无缝嵌入现有MATLAB图像处理流程。附带实测示例ringexample_corr.edf及详细使用说明,含明确LICENSE授权信息,方便科研与工程部署。
CT图像里的环形伪影,是做同步辐射、微焦点CT、工业CT甚至部分医用CT重建时绕不开的“老朋友”。它不像噪声那样随机,也不像条纹那样方向明确——它是一圈圈同心圆,安静地趴在重建断层图上,不声不响地扭曲灰度分布、掩盖微小结构、干扰定量分析。我第一次在实验室看到自己重建的样品截面图上浮出三道清晰的亮环时,还以为是探测器坏了一列像素;后来翻遍文献才发现,这是X射线探测器响应不一致、通道增益漂移、平场校正残留、甚至机械旋转轴心偏移共同酿成的“系统性误会”。更头疼的是:不同设备、不同扫描条件、不同重建算法下,环的位置、宽度、强度、连续性差异极大——用一个阈值一刀切?失效;套个高斯滤波抹平?细节全糊;手动画ROI抠环?一帧图调10分钟,百帧序列直接劝退。

这套MATLAB环境下CT图像环形伪影一键修复工具集,就是我在中科院高能所、上海光源和几个工业CT厂商现场踩了六年坑之后,把零散脚本、临时函数、反复修改的GUI、还有被学生改崩三次又抢救回来的核心算法,全部重写、归一、封装、压测后沉淀下来的实战包。它不讲“通用去环框架”这种虚概念,只解决三件事:环在哪?环怎么变?环怎么消?所有模块都围绕CT图像的物理成像链路设计——从原始投影数据的平场校正(sequence_flatfield),到重建后断层图的中心精确定位(CenterDetermination),再到极坐标下沿径向抑制(polartrans + kill_rings_V8),最后支持交互式验证(thresh_tool + show2)。关键词里写的“CT去环、环形伪影、MATLAB工具、中心定位、极坐标变换”,不是功能罗列,而是这条技术路径上五个不可跳过的锚点。它适合两类人:一类是刚拿到CT数据、急需出图发论文的研究生,双击ringcorrector.m就能跑通全流程;另一类是已有成熟重建流程的工程师,把sequence_clean或flatfield直接嵌进自己的pipeline,不碰GUI、不改逻辑、不引入新依赖。下面我就以一个真实调试案例为线索,把这套工具为什么这么设计、每个模块怎么用、哪些参数不能乱动、哪些地方必须手调,掰开揉碎讲清楚。

1. 工具集整体设计逻辑与物理依据

1.1 环形伪影的本质不是“图像问题”,而是“成像链路失配”

很多初学者一上来就猛调remove_rings.m里的sigma参数,结果越调环越粗、边缘越虚。这不是算法不行,而是没抓住病根。环形伪影的物理源头,永远在探测器响应的非均匀性上。我们来拆解一次典型CT成像链路:

X射线源 → 样品衰减 → 探测器接收 → 模数转换 → 投影数据 → 重建算法 → 断层图像

环,几乎只出现在最后一个环节——重建后的断层图像上。但它真正的病因,可能藏在前面任意一环:

  • 探测器像素响应不一致:某几列像素灵敏度偏高/偏低,在扇束或锥束重建中,会沿特定半径“扫”出环;
  • 平场校正(Flat-field correction)不彻底:采集的空白场(open beam)本身含低频渐变或局部缺陷,校正后残留周期性响应偏差;
  • 几何校准误差:旋转中心(rotation center)偏移哪怕0.3像素,在FBP重建中就会导致所有环向图像中心收缩或发散;
  • 重建算法插值缺陷:如使用线性插值重采样投影数据,高频环结构会被模糊拉宽。

所以,这套工具集的第一设计原则是:不孤立处理“环”,而重建“环生成的物理路径”。你看目录里既有CenterDetermination.m(找中心),又有polartrans.m(极坐标变换),还有flatfield.m(平场校正)和sequence_flatfield.m(批量平场),它们不是并列功能,而是存在强因果依赖的上下游模块。

提示:如果你跳过CenterDetermination直接跑kill_rings_V8,算法内部默认中心是图像几何中心(size(I,1)/2, size(I,2)/2)。但实际CT设备的旋转轴心偏移量常达±5像素——这会导致极坐标变换后,环不再严格对齐径向线,后续滤波变成“斜着刮”,不仅去不干净,还会引入新的径向条纹。我见过最典型的案例:某高校用标准phantom扫描,重建图中心偏移3.7像素,用默认中心去环后,原本4条环只剩2条,但图像右下角凭空多出两道斜向伪影,花了两天才定位到是中心误差。

1.2 为什么必须包含多种去环算法?——环的形态学谱系决定算法适配性

环不是铁板一块。根据同步辐射线站实测数据统计,CT图像中的环可划分为四类典型形态,每种对应不同主导机制和最优抑制策略:

环类型物理成因视觉特征主导频域推荐算法关键参数依据
硬环(Hard Ring)探测器单列/多列像素完全失效(dead pixel cluster)边缘锐利、灰度阶跃明显、宽度≤2像素高频突变kill_rings_V8threshold控制检测灵敏度,width固定为1–2
软环(Soft Ring)平场校正残留低频响应渐变边缘模糊、灰度缓慢过渡、宽度≥5像素低频趋势项remove_ringssigma控制高斯核尺度,需匹配环宽度
断续环(Broken Ring)机械振动导致部分角度投影缺失环呈弧段状、不闭合、位置随机方向性频谱能量dj_remove_rings_v3angle_stepradius_step需按投影角度分辨率设置
复合环(Composite Ring)多种因素叠加(如死像素+平场渐变)同一图像含硬环+软环+断续环全频段混叠kill_rings_V8_paralle+remove_rings级联先用V8去硬环,再用remove_rings压低频背景

这个分类不是理论推演,而是我们用同一套Phantom在BEAMLINE 1W2(北京同步辐射)和BL13W(上海光源)上,采集27组不同kVp、不同滤片、不同探测器温度下的数据,人工标注1367个环实例后聚类得出的结论。kill_rings_V8本质是径向剖线+阈值检测+插值修复,对硬环精准高效;remove_rings基于傅里叶域方向滤波,擅长压制低频渐变;dj_remove_rings_v3则采用极坐标下Hough空间投票,对断续环鲁棒性强。工具集不提供“一键智能选算法”,因为目前尚无可靠指标能自动判别环类型——但提供了thresh_tool.m让你在GUI里实时拖动阈值滑块,肉眼观察环响应变化,这才是工程实践中最可靠的判断方式。

1.3 极坐标变换为何是去环的“中枢神经”?——从笛卡尔到极坐标的不可逆映射

所有主流去环算法(包括商业软件如Octopus、Dragonfly)最终都落在极坐标系操作,这不是巧合,而是由环的几何本质决定的。环是以图像中心为圆心的同心圆集合,在笛卡尔坐标(x,y)下,它是一条非线性曲线;但在极坐标(r,θ)下,它退化为一条水平直线(r = constant)。这意味着:

  • 在极坐标图像中,环的抑制等价于沿θ方向(即角度维)做一维信号处理
  • 原本需要二维卷积的滤波,可降维为多个独立的一维操作,计算量下降1~2个数量级;
  • 更关键的是:环的强度变化只沿r方向,θ方向理论上应为常量——任何θ方向的波动都是噪声或伪影,可直接滤除。

polartrans.m正是实现这一映射的核心。它不是简单调用MATLAB内置polartransform(那个函数在大尺寸图像上内存溢出且插值质量差),而是采用分块重采样+三次B样条插值+边界反射填充策略。具体流程如下:

  1. 预计算映射表:对目标图像I(M×N),预先生成两个索引矩阵IrItheta,大小同I,每个元素存储该像素在极坐标下的r和θ索引;
  2. 分块处理:将输出极坐标图P(R_max × Θ_steps)按行分块,每块高度≤512行,避免单次内存申请过大;
  3. B样条插值:对每块,用interp2配合预计算的Ir/Itheta进行三次B样条插值,比默认双线性插值保留更多高频细节;
  4. 边界处理:对r=0(图像中心)区域,采用反射填充而非零填充,防止中心出现黑斑。

实测对比:对2048×2048的EDF图像,polartrans.m耗时2.3s(i7-11800H),而MATLAB原生pol2cart+imwarp组合耗时11.7s且中心区域模糊严重。这个差异在批量处理上百帧时,直接决定你是否能在午饭前跑完全部数据。

2. 核心模块解析与实操要点

2.1 中心定位:CenterDetermination.m —— 为什么不用Hough圆检测直接找?

看到目录里同时存在CenterDetermination.mCircularHough_Grd.m,新手常疑惑:既然都有Hough检测,为啥不直接用后者?答案很实在:Hough圆检测在CT图像上极易失效。原因有三:

  • CT图像环常被样品结构遮挡(如金属植入物、高密度骨骼),导致圆弧不完整,Hough投票峰值分散;
  • 低信噪比下(如低剂量扫描),环边缘信噪比<3,Hough变换无法形成稳定峰值;
  • Hough检测返回的是“可能圆心集合”,需额外聚类筛选,而CT要求的是唯一、亚像素精度的旋转中心

CenterDetermination.m采用双阶段优化策略,专治CT场景:

第一阶段:粗定位(Radon变换主峰法)
对输入图像I做Radon变换,沿180个角度(0°–179°)投影。理想情况下,若环完美同心,Radon域中会出现一条垂直亮线(对应环半径)。但实际中,这条线会因中心偏移而倾斜。算法通过拟合该亮线斜率,反推出中心偏移方向和量级,精度约±2像素。

第二阶段:精修(梯度模极小化)
定义代价函数:
$$ J(c_x,c_y) = \sum_{\theta} \left| \frac{\partial I_{polar}(r,\theta)}{\partial \theta} \right|{r=r_0} $$
其中$I
{polar}$是当前中心$(c_x,c_y)$下的极坐标重采样图,$r_0$取环最密集半径区(自动检测)。该函数衡量的是:当中心正确时,环在θ方向应无变化,梯度模最小。用fminsearch在粗定位结果±3像素范围内搜索,收敛精度达0.05像素。

实操心得:我建议永远先运行CenterDetermination(I)得到.mat结果,再传给后续模块。曾有用户跳过此步,直接用CircularHough_Grd找中心,结果在铝棒phantom图上找到7个候选圆心,手动选错一个,导致后续所有去环结果在棒体边缘产生放射状伪影——因为Hough返回的是“环的圆心”,而CT需要的是“旋转轴心”,二者物理意义不同,数值也常差1–3像素。

2.2 极坐标变换:polartrans.m —— 参数设置的三个生死线

polartrans.m调用接口简洁:P = polartrans(I, center, rmax, ntheta, nr),但四个参数背后全是坑:

  • center: 必须是CenterDetermination输出的精确坐标,严禁四舍五入取整。我见过最惨案例:用户把[512.372, 512.891]手动写成[512,512],导致2048×2048图像在r=1000处出现0.8像素的径向错位,去环后环变“毛边环”。

  • rmax: 最大半径。设太小会裁剪外环,设太大则P图冗余行多、内存暴涨。推荐公式
    rmax = ceil(0.7071 * max(size(I)))
    (即取图像对角线长的70.7%,覆盖99%有效环区域,同时避免过度填充)

  • ntheta: 角度采样数。默认512足够,但若图像含细密断续环(如微焦点CT的1μm级环),需提升至1024。注意:ntheta每翻倍,内存占用×2,计算时间+40%。

  • nr: 径向采样数。这是最容易被忽视的参数。设太小(如256),环宽度被压缩,kill_rings_V8无法分辨相邻环;设太大(如4096),插值噪声放大。实测黄金值nr = round(rmax * 1.2)。例如rmax=1440,则nr=1728,既能分辨0.5像素宽环,又不引入冗余噪声。

注意:polartrans.m输出的P图,其第1维是r(径向),第2维是θ(角度)。所有后续算法(如kill_rings_V8)都按此顺序设计。若你用permute(P,[2,1])转置,会导致算法完全失效——因为kill_rings_V8默认对每行(固定r)做θ方向处理,转置后变成对每列处理,方向全反。

2.3 交互式阈值调节:thresh_tool.m —— 为什么GUI比命令行更可靠?

thresh_tool.m打开后是一个极简界面:左侧原图,右侧极坐标图,中间一个滑块控制阈值。它的价值不在“炫技”,而在建立人眼判断与算法参数的直觉映射

工作流如下:
1. 加载图像 → 运行CenterDeterminationpolartransthresh_tool(P)
2. 拖动滑块,观察极坐标图中环的响应:硬环表现为水平亮线,软环表现为倾斜带状亮区;
3. 当滑块调至某值时,亮线刚好连成一线(硬环)或亮带宽度收窄至最小(软环),此时记录阈值;
4. 将该阈值填入kill_rings_V8threshold参数。

为什么这比查文献推荐值靠谱?因为文献值基于标准phantom,而你的样品密度、扫描剂量、重建算法都不同。上周帮苏州某企业处理碳纤维复合材料CT图,文献推荐threshold=0.15,但实测发现需调到0.32才能检出埋在低对比度区域的微弱环——因为他们的重建用了TV正则化,压制了环的绝对强度。

提示:thresh_tool支持键盘快捷键。滑块聚焦时,按←→键微调(步进0.01),按Shift+←→键粗调(步进0.1),按Enter确认当前值并打印到命令行。这个设计源于我们现场调试时戴手套操作触摸屏的痛点——毕竟线站控制室温度常低于18℃,戴手套点鼠标比敲键盘稳得多。

2.4 平场校正:flatfield.m 与 sequence_flatfield.m —— 别让校正本身制造新环

平场校正是CT数据预处理的基石,但也是伪影新来源。flatfield.m实现标准公式:
$$ I_{corr}(x,y) = \frac{I_{proj}(x,y) - I_{dark}(x,y)}{I_{flat}(x,y) - I_{dark}(x,y)} $$

但关键在I_{flat}I_{dark}的获取:

  • I_{dark}:必须是关闭X光管、相同积分时间、相同温度下采集的暗场。用室温下采集的dark去校正高温探测器数据,会引入热噪声相关环。
  • I_{flat}:必须是无样品、相同几何条件、相同滤片下的空白场。若flat中含灰尘斑点,校正后会在所有重建图中固定位置出现“环状尘点”。

sequence_flatfield.m专为批量投影数据设计。它不要求用户手动配对proj/flat/dark,而是按文件名规则自动识别:
-scan_0001.edf,scan_0002.edf, … → 投影数据
-flat_0001.edf,flat_0002.edf, … → 空白场(取前5帧平均)
-dark_0001.edf→ 暗场(取单帧)

更关键的是,它内置flat场异常值剔除:对每个像素,计算其在所有flat帧中的标准差,若>3σ,则该像素在flat平均时被剔除,用邻域均值替代。这能有效消除flat中偶然的cosmic ray击中造成的亮点,避免校正后出现“放射状伪影”。

踩坑实录:某用户用同一套flat校正三天数据,第三天发现重建图中心出现新环。排查发现,flat文件夹里混入了一帧探测器冷却不足时采集的flat(温度高2℃),其响应非线性加剧,导致校正系数图出现低频环——sequence_flatfield的异常值检测本可拦截,但他手动删了检测开关。

3. 实操全流程与关键环节实现

3.1 单帧图像修复:从ringexample_corr.edf到clean断层图

我们以工具包自带的ringexample_corr.edf为例,走一遍完整流程。该文件是上海光源BL13W线站采集的铝棒phantom重建图,含3条典型硬环。

步骤1:加载与可视化

% 读取EDF格式(自动识别字节序) I = tiffread2('ringexample_corr.edf'); % 注:tiffread2.m兼容EDF/TIFF/FITS figure; imshow(I,[]); title('原始图像');

此时可见三条明亮同心环,最内环半径约120像素。

步骤2:中心精确定位

% 自动寻找旋转中心 center = CenterDetermination(I); disp(['检测中心: (', num2str(center(1), '%.3f'), ', ', ... num2str(center(2), '%.3f'), ')']); % 输出:检测中心: (512.372, 512.891)

注意:CenterDetermination会自动显示Radon域图和优化过程,方便你肉眼确认是否收敛。

步骤3:极坐标变换

rmax = ceil(0.7071 * max(size(I))); % 1440 for 2048x2048 P = polartrans(I, center, rmax, 512, round(rmax*1.2)); figure; imshow(P,[]); title('极坐标图(r为行,θ为列)');

此时P图中,三条环变为三条水平亮线,位于r≈120, 240, 360行附近。

步骤4:交互式阈值选定

thresh_tool(P); % 拖动滑块至亮线最清晰时,记下阈值(例:0.28)

步骤5:执行去环(以kill_rings_V8为例)

% 参数说明: % threshold=0.28:由thresh_tool确定 % width=1:硬环宽度,单位像素 % method='linear':插值方式,'linear'快,'spline'保真 I_clean = kill_rings_V8(I, center, 0.28, 1, 'linear'); figure; subplot(1,2,1); imshow(I,[]); title('原始'); subplot(1,2,2); imshow(I_clean,[]); title('去环后');

对比可见,三条环基本消失,铝棒边缘锐度保持完好。

步骤6:结果验证(可选但强烈推荐)

% 计算环抑制比(RSR) rsr = 20*log10(std(I(:))/std(I_clean(:))); fprintf('环抑制比: %.1f dB\n', rsr); % 实测:28.3 dB % 检查中心区域PSNR mask = zeros(size(I)); mask(450:570,450:570) = 1; % 中心120x120区域 psnr = psnr(I.*mask, I_clean.*mask, 65535); fprintf('中心区域PSNR: %.2f dB\n', psnr); % 实测:42.7 dB

3.2 批量序列处理:工业CT产线级自动化

工业CT常需处理数百帧重建图(如动态扫描、相位衬度CT)。sequence_clean.m为此设计,支持全自动流水线:

% 设置路径 input_dir = 'D:\CT_data\recon_series\'; output_dir = 'D:\CT_data\clean_series\'; % 配置参数(全部可调) cfg.center_auto = true; % 是否自动找中心(false则用cfg.center_fixed) cfg.center_fixed = [512,512]; % 若手动指定 cfg.algorithm = 'kill_rings_V8'; % 可选 'remove_rings', 'dj_remove_rings_v3' cfg.threshold = 0.25; % 若auto=false,需手动设 cfg.width = 1; cfg.rmax_ratio = 0.7071; % rmax = ratio * max(size) % 执行批量处理(自动识别*.edf, *.tif, *.fits) sequence_clean(input_dir, output_dir, cfg);

sequence_clean.m内部逻辑:
- 遍历input_dir下所有图像文件,按字母序排序;
- 对首帧运行CenterDetermination,并将结果存为center.mat
- 后续所有帧复用该中心(因同一扫描序列旋转中心不变);
- 每帧独立调用对应去环算法,结果保存为同名.tif
- 生成process_log.txt,记录每帧处理时间、RSR、是否报错。

实操心得:批量处理前务必用sequence_cleantest_mode=true参数试跑前3帧。曾有用户直接全量运行,结果因某帧含异常高亮(探测器瞬时噪声),kill_rings_V8误判为超宽环,将整帧插值模糊——test_mode会提前报错并停机,避免污染全部数据。

3.3 多算法级联:应对复合环的“手术刀式”处理

thresh_tool显示极坐标图中既有水平亮线(硬环),又有倾斜亮带(软环),说明存在复合环。此时单算法失效,需级联:

% 步骤1:用kill_rings_V8去除硬环(保留软环背景) I_hardfree = kill_rings_V8(I, center, 0.28, 1); % 步骤2:对硬环清理后的图,再用remove_rings压低频 % 注意:remove_rings输入是笛卡尔图,非极坐标 I_clean = remove_rings(I_hardfree, 'sigma', 15, 'method', 'gaussian'); % 验证:比较级联前后 figure; subplot(2,2,1); imshow(I,[]); title('原始'); subplot(2,2,2); imshow(I_hardfree,[]); title('去硬环后'); subplot(2,2,3); imshow(I_clean,[]); title('级联后'); subplot(2,2,4); imshow(abs(I-I_clean),[]); title('残差(环区域亮)');

remove_ringssigma参数需根据软环宽度设定。经验公式:sigma ≈ ring_width_in_pixels × 0.8。若thresh_tool中软环亮带宽约20像素,则sigma=16

4. 常见问题与排查技巧实录

4.1 典型问题速查表

现象可能原因排查步骤解决方案
去环后出现新放射状条纹中心定位不准,极坐标变换失真1. 用show2(I, center)查看中心标记是否在环心
2. 检查CenterDetermination输出的收敛曲线是否平滑
重新运行CenterDetermination,增大options.MaxIter=200,或手动微调初始中心
环未去除,仅变淡阈值过低,未触发检测1. 运行thresh_tool(P),观察亮线响应
2. 查看P图中环位置的灰度均值
threshold提高0.05~0.1,或改用dj_remove_rings_v3(对弱环更敏感)
去环后图像整体变暗/变亮平场校正残留,或kill_rings_V8插值引入偏置1. 检查flatfield是否用对dark/flat
2. 对I_clean做直方图,对比原始图
改用remove_rings(它不做插值,只频域滤波),或在kill_rings_V8后加imadjust校正灰度
polartrans报内存溢出nrntheta设得过大1. 计算所需内存:nr × ntheta × 8 bytes
2. 检查rmax是否远超图像尺寸
按推荐公式重设rmaxnr,或启用polartransblock_size选项分块处理
sequence_flatfield报错“flat not found”文件名规则不匹配1. 列出input_dir下文件,确认命名含flat_前缀
2. 检查flat_文件是否与scan_同数量
重命名flat文件为flat_0001.edf等,或修改sequence_flatfield.mflat_pattern变量

4.2 独家避坑技巧

技巧1:用show2.m做中心漂移监控
CT长时间扫描时,探测器温升会导致旋转中心缓慢漂移。show2(I, center)不仅标出中心点,还会在图像四角显示小环(半径50像素),若这些小环变形,说明中心已漂移。建议每50帧运行一次,若漂移>0.5像素,重启CenterDetermination

技巧2:consolidator13.m拯救碎片化环
dj_remove_rings_v3检测到大量短弧段环,但kill_rings_V8无法处理时,用consolidator13.m先聚合:

% 输入:环坐标列表[r_list, theta_list] [r_agg, theta_agg] = consolidator13(r_list, theta_list, 'radius_tol', 3, 'angle_tol', 15); % 输出聚合后的环中心和半径,可转为`kill_rings_V8`的自定义环输入

技巧3:query_xml.m自动提取扫描参数
EDF文件头常含beam_energydetector_distance等元数据。query_xml.m可解析并返回结构体:

meta = query_xml('ringexample_corr.edf'); fprintf('能量: %.1f keV, 距离: %.1f m\n', meta.beam_energy, meta.detector_distance); % 这些参数可用于自动选择算法(如高能扫描倾向硬环,选V8)

技巧4:pathdef.m一键环境配置
首次运行前,双击pathdef.m,它会自动将所有子文件夹加入MATLAB路径,并检查依赖函数(如consolidator.m)。若提示缺失,说明你漏拷了某个.m文件——工具包所有函数均为必需,无冗余。

4.3 性能基准与硬件适配建议

在Intel i7-11800H + 32GB RAM + MATLAB R2023a环境下,对2048×2048 EDF图像的实测耗时:

模块单帧耗时内存峰值说明
CenterDetermination4.2 s1.8 GB主要消耗在Radon变换
polartrans2.3 s1.1 GB分块策略有效控内存
kill_rings_V80.8 s0.6 GB纯向量化,无循环
remove_rings3.1 s2.4 GBFFT计算占大头
dj_remove_rings_v36.7 s3.2 GBHough投票内存密集

硬件建议:
- 内存:处理2K图像至少需16GB,4K图像建议32GB;
- CPU:kill_rings_V8_paralle支持多核,开启parpool后提速2.1倍;
- SSD:EDF/TIFF读取速度影响显著,NVMe SSD比SATA SSD快3倍。

最后分享一个小技巧:如果处理的是相位衬度CT(PCI)图像,环常与相位边缘耦合。此时先用flatfield做基础校正,再运行sequence_clean时,将cfg.algorithm设为'dj_remove_rings_v3',并手动设cfg.angle_step=0.5(提高角度分辨率),能更好分离环与边缘信号。这套工具我已在12个不同CT平台部署过,从桌面微焦点设备到同步辐射大装置,核心逻辑从未变过——环是物理的,算法是工具的,而经验,才是让工具真正落地的那双手。

本文还有配套的精品资源,点击获取

简介:专为CT重建图像设计的环形伪影处理工具集,全部基于MATLAB开发,开箱即用。支持EDF、TIFF、FITS等多种常见格式读取,内置kill_rings_V8、remove_rings、dj_remove_rings_v3等主流去环算法,覆盖不同噪声强度和环结构特征。提供环中心自动定位(CenterDetermination)、极坐标重采样(polartrans)、Hough圆检测(CircularHough_Grd)辅助校准、交互式阈值调节(thresh_tool)、平场校正(flatfield)以及批量序列预处理(sequence_clean、sequence_flatfield)等功能。适配常规CT投影数据与断层重建图像,可无缝嵌入现有MATLAB图像处理流程。附带实测示例ringexample_corr.edf及详细使用说明,含明确LICENSE授权信息,方便科研与工程部署。


本文还有配套的精品资源,点击获取

http://www.jsqmd.com/news/946139/

相关文章:

  • 告别手动收取:蚂蚁森林能量自动收取脚本的终极解放方案
  • ACE-D3.1.4 ~D1.3.6 AWUNIQUE signal/Cache line size restrictions/Transaction constraints
  • GB/T35774-2017长条型包装标准及包装测试项目概述
  • 破解下载速度枷锁:IDM激活脚本的技术解密与实践指南
  • 告别AT指令手册!用ESP8266和Arduino IDE快速上手物联网项目(附常用指令速查表)
  • NVIDA开源视觉定位神器:LocateAnything
  • Superpixel-Based Fast Fuzzy C-Means Clustering for Color Image Segmentation
  • 纳米针基人机接口:微纳技术如何重塑生命信息交互
  • 告别龟速下载!保姆级教程:用国内镜像站5分钟搞定MSYS2安装与配置
  • 2026年更新:河北螺旋钢管知名企业弘冠管道综合实力深度解析 - 2026年企业资讯
  • 告别SLAM跟踪丢失就卡死:用ORB-SLAM Atlas实现多地图自动切换与融合的保姆级配置
  • 华为锂电池安装指导
  • 【稀缺首发】Gartner未公开的AI治理成熟度评估矩阵(含17项工具集成得分卡)
  • 别再死磕I2S了!用FPGA搞定16通道TDM音频传输(附Verilog代码)
  • 从蔡斯博士案例看STEM教育:如何系统性推动女孩参与计算机科学
  • 车载激光雷达老二被割草机“带飞”,速腾聚创机器人业务开辟业绩新增长曲线
  • 想让七轴机械臂更听话?手把手教你用Python+ROS实现零空间避障(附代码)
  • 如何彻底解决Zotero中文文献乱码:茉莉花插件3步完全指南
  • 用MATLAB给振动信号做‘体检’:手把手教你提取12个关键时域特征(附完整代码)
  • 认识 Node.js——从历史到你的第一个程序
  • 品牌房企打造的18号线四代宅大平层,靠谱吗? - mypinpai
  • 告别编译烦恼:在Visual Studio 2013 MFC项目中直接使用预编译的Paho MQTT库
  • 微针人机界面:无创生物传感与智能给药的前沿技术解析
  • FreeRTOS 手动移植教程(二):任务管理——多任务创建、优先级抢占与删除
  • ROS节点自启动踩坑实录:从startup Application到robot_upstart,我为什么最终选择了后者?
  • 从扫地机到自动驾驶:聊聊SLAM技术如何用激光雷达和视觉传感器搞定室内外定位
  • POP3协议抓包避坑指南:Wireshark过滤器这样设,一眼锁定关键认证数据
  • Linux 内核中的内存映射:从信号捕获到自动维护监控系统
  • 选购宝马专修,宝诚汇是你的明智之选 - 工业品牌热点
  • 从‘暴力破解’到‘算法还原’:深度解析super_mega_protection.exe的密钥校验逻辑