CT图像去除金属伪影-MATLAB实现
如果CT机性能较差,图像中的金属伪影信息就无法消除,现在高级的CT机都带有金属伪影去除功能。
本文提出一种最简单的金属伪影的消除方法,对单金属图像进行伪影消除的效果还不错,简单的多金属图像进行伪影消除的效果还将就,复杂的多金属图像的伪影消除效果就不太好。伪影的消除依赖于线性插值方法,线性插值方法有需要金属的radon变换结果,多金属的randon变化就是多条正弦线的集合。
方法的原理参考文献:CT图像中金属伪影的快速校正(谷建伟)。
去除伪影的步骤如下:
1、对原始图像(图A)进行阈值分割,把金属图像分割出来,金属图像(图B),抠掉金属的图像(图C)。
%显示原始图像的灰度图
srcImg=imread('image7.png');
srcImg=rgb2gray(srcImg);
srcImg=imresize(srcImg,[400,400]);
figure;imshow(srcImg),title('原始图像');%选定阈值进行分割,选择阈值为220
[srcImg_width,srcImg_height]=size(srcImg);
metalImg = zeros(srcImg_width,srcImg_height);
notMetalImg = zeros(srcImg_width,srcImg_height);thrshldVal = 220;
for w=1:srcImg_widthfor h=1:srcImg_heightif(srcImg(w,h)<thrshldVal)metalImg(w,h) = 0;notMetalImg(w,h) = srcImg(w,h);else metalImg(w,h) = 255;notMetalImg(w,h) = 0;endend
end% xmax = max(max(metalImg)); %求得InImg中的最大值
% xmin = min(min(metalImg)); %求得InImg中的最小值
% imageB = (metalImg-xmin)/(xmax-xmin); %归一化
% figure;imshow(imageB),title('金属的阈值分割图像');
% xmax = max(max(notMetalImg)); %求得InImg中的最大值
% xmin = min(min(notMetalImg)); %求得InImg中的最小值
% imageC = (notMetalImg-xmin)/(xmax-xmin); %归一化
% figure;imshow(imageC),title('原始图像去除金属部分');
2、求图像A、图像B和图像C的Radon变换,得到三张正弦图,分别是图RA,图RB,图RC。
%Radon变换的角度范围
radon_theta=0:179;% 金属的Radon变换
[R_metal,X_metal]=radon(metalImg,radon_theta);
figure,imagesc(radon_theta,X_metal,R_metal),title('金属的Radon变换');
xlabel('\theta');
ylabel('x\prime');
colormap(gray);
colorbar;%非金属部分的Radon变换
[R_notMetal,X_notMetal]=radon(notMetalImg,radon_theta);
figure,imagesc(radon_theta,X_notMetal,R_notMetal),title('非金属部分的Radon变换');
xlabel('\theta');
ylabel('x\prime');
colormap(gray);
colorbar;
3、由于图RB就是造成图A伪影的原因。在图RC中去除和图RB相交的部分,此时会留下间隙,间隙使用插值算法进行校正。此时得到图R_RES。
% 对金属图像的Radon变换结果进行插值校正
[radon_width,radon_height]=size(R_metal);
%radon变换的结果是横向坐标是距离,纵坐标是角度
%metalPQBeta矩阵,存储金属的radon变换的边界
metalPQBeta = zeros(radon_width,radon_height);
%获取金属的Radon变换的边界
for h = 1:radon_heightfor w = 2:radon_width-1preIndex = w -1;nextIndex = w + 1;currPix = R_metal(w,h);if(currPix > 0)if((R_metal(nextIndex,h) > 0 && R_metal(preIndex,h) == 0) || (R_metal(nextIndex,h) == 0 && R_metal(preIndex,h) > 0))metalPQBeta(w,h) = 100;endendend
end% 开始插值,非金属的radon变换线性插值替换金属的radon变换
for h = 1:radon_heightupIndex = 0;for w = 1:radon_widthif( metalPQBeta(w,h) == 100 && upIndex == 0)upIndex = w;elseif(metalPQBeta(w,h) == 100 && upIndex ~= 0)g_pBeta = R_notMetal(upIndex,h);g_qBeta = R_notMetal(w,h);midPixValue = R_metal(round((upIndex + w)*0.5),h); if(midPixValue > 0)for k = upIndex:wleft_val = g_pBeta*(w - k)/(w - upIndex);right_val = g_qBeta*(k - upIndex)/(w - upIndex);R_notMetal(k,h) = left_val + right_val;endupIndex = 0; elseupIndex = w;end endend
end% figure,imagesc(radon_theta,X_notMetal, R_notMetal),title('对非金属部分radon变换结果进行插值校正');
% xlabel('\theta');
% ylabel('x\prime');
% colormap(gray);
% colorbar;
4、对图R_RES进行Radon的逆变换,得到图D,由于图D中此时缺少金属的信息,因此把图B中的金属部分加到图像D中,得到最终的金属伪影校正图F。
%对非金属的radon的变换的插值校正结果进行反变换
irdnImg=iradon(R_notMetal,radon_theta,'linear','Hann',1,1);%金属信息补偿
xmax = max(max(irdnImg)); %求得InImg中的最大值
irdnImg=imresize(irdnImg,[400,400]);
[outImg_width,outImg_height]=size(irdnImg);
for w = 1:outImg_widthfor h = 1:outImg_heightif(metalImg(w,h) > 0)irdnImg(w,h) = xmax;endend
end%图像的归一化处理
xmin = min(min(irdnImg)); %求得InImg中的最小值
resImg = (irdnImg-xmin)/(xmax-xmin); %归一化
figure,imshow(resImg),title('金属伪影校正最终图像');
CT图像去除金属伪影-MATLAB实现相关推荐
- ct图像中的金属伪影
ct图像中的金属伪影校正方法 背景 随着现代医学的发展,通过守住在病人体内植入带有金属物质的假体的情况越来越普遍.最常见的是假牙植入.心脏起搏器,以及越来越多的各种关节和假肢等.这些金属物体相比较于人 ...
- ICA独立成分分析去除EEG伪影
目录 介绍 ICA假设 方法 组件投影 实验数据样本 移除眨眼和肌肉伪影 一些严重污染的脑电数据 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 .QQ交流群1:903290195(已满,请 ...
- ct伪影消除matlab代码,CT去伪影总结
伪影形成的原因和解决方法 系统设计.X射线源.探测器.病人系统设计相关:混叠.部分容积.散射混叠伪像:产生原因:由于扫描机不能以间隔小于探测器宽度进行测量,香农定理违背,因此会有混叠条纹. 解决办法: ...
- CT图像常见伪影及解决方法
- 前言 - CT的伪影理论上可被定义为图像中被重建数值与物体真实衰减系数之间的差异,简单来说,对于图像重建过程中不该出现在图像上的影像,可认为其是伪影(antifacts). - 01 伪影的分类 ...
- acdsee扫描没有图像_详解CT图像常见伪影成因及解决方法
CT 图像伪影 (artifact) 是指重建图像上与实际解剖结构不相符的密度异常变化.CT 图像比传统平扫X线更容易出现伪影,这是因为 CT 图像是由成千上万独立的原始测量数据重建而得,而计算机重建 ...
- 图像去除栅格,条纹伪影的办法(附python代码)
医学图像中,有些时候由于使用栅格作为准束用的手段,这会导致栅格的信息叠加在图像中,形成所谓的栅格伪影,比如DR图像中的栅格伪影,如下所示: 比如像这张图像中的条纹,这就是栅格伪影.栅格伪影对于正常的图 ...
- (二十二:2020.11.09)论文学习之《CT中伪影的识别和规避》
脚踏实地地解决CT的伪影问题(一)<Artifacts in CT: Recog-nition and Avoidance> 讲在前面 摘要 介绍 物理伪影 一.Beam Hardenin ...
- CT伪影:根本原因与规避方法
CT伪影很常见,且原因复杂.掌握关于伪影的相关知识显得非常重要,因为它们会模仿病理学改变(例如部分容积伪影)或将图像质量降低到无法诊断的水平. 今天我们根据造成伪影的根本原因对CT伪影进行分类,并简要 ...
- letswave7中文教程3:脑电数据预处理-ICA去除伪影
目录 ICA/BSS的理论与模型 第5步:计算ICA矩阵 第6步:识别伪影成分 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 .QQ交流群:941473018 ICA/BSS的理论与模型 ...
- Adaptive Spectrum Noise Cancellation (自适应频谱噪声消除 ,ASNC)去除强运动伪影
文章: A Novel Adaptive Spectrum Noise Cancellation Approach for Enhancing Heartbeat Rate Monitoring in ...
最新文章
- 微信小店 API 手册
- 原生Android12,Android 12原生设计曝光 网友看了惊呼神似iOS
- 用D触发器构造寄存器
- C++的Matlab接口
- mysql查询没有权限试图_MySQL迁移后提示查询view权限不足的处理
- CDH5.16.2下载安装
- 10突然只剩下c盘和d盘了_科普:为什么软件不能装C盘?会卡!这是真的吗?
- 文件格式和扩展名不匹配。文件可能已损坏或不安全。除非您信任其来源,否则请勿打开。是否仍要打开它?
- JS处理Cookie
- python项目实战:模拟登陆CSDN
- 18. Make interfaces esay to use correctly and hard to use incorrectly
- [转载].NET开发常用的10条实用代码
- 在内核中实现URL重定向
- Excel中vba教程——设置行高实例
- java 中文转英文性能最快
- and no properties discovered to create BeanSerializer 问题解决
- spark-streaming 编程(四)自定义输出foreachRDD
- ionic refresher(下拉刷新)
- C语言——二项式定理
- 2379. 得到 K 个黑块的最少涂色次数
热门文章
- windows server添加角色
- 计算机培训excel的制作,绵阳电脑excel表格制作教程
- python语言保留字有true吗_python语言的保留字
- 最新最全的阿里云产品手册出炉
- React子组件给父组件传值
- java.sql.SQLException: sql injection violation, syntax error: TODO QUES
- 王佩丰excel教程笔记(排序 筛选)
- vscode连接远程服务器报错ln: failed to create hard link ... File exists
- 金蝶服务器显示已离线,金蝶K3提示云服务器已离线
- .NET 7 预览版来啦,我升级体验了