Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >医学图像处理案例(十五)——基于小波变换的医学图像融合

医学图像处理案例(十五)——基于小波变换的医学图像融合

作者头像
医学处理分析专家
发布于 2020-06-29 07:45:49
发布于 2020-06-29 07:45:49
2.6K00
代码可运行
举报
运行总次数:0
代码可运行

今天将介绍使用小波变换来对多模态医学图像进行融合。

1、基于小波变换的图像融合回顾

小波变换融合算法基本思想:首先对源图像进行小波变换,然后按照一定规则对变换系数进行合并;最后对合并后的系数进行小波逆变换得到融合图像。

1.1、小波分解原理简介

LL:水平低频,垂直低频

LH:水平低频,垂直高频

HL:水平高频,垂直低频

HH:水平高频,垂直高频

其中,L表示低频,H表示高频,下标1、2表示一级或二级分解。在每一分解层上,图像均被分解为LL,LH,HH和HL四个频带,下一层的分解仅对低频分量LL进行分解。这四个子图像中的每一个都是由原图与一个小波基函数的内积后,再经过在x和y方向都进行2倍的间隔采样而生成的,这是正变换,也就是图像的分解;逆变换,也就是图像的重建,是通过图像的增频采样和卷积来实现的。

1.2、融合规则

规则一:系数绝对值较大法

该融合规则适合高频成分比较丰富,亮度、对比度比较高的源图像,否则在融合图像中只保留一幅源图像的特征,其他的特征被覆盖。小波变换的实际作用是对信号解相关,并将信号的全部信息集中到一部分具有大幅值的小波系数中。这些大的小波系数含有的能量远比小系数含有的能量大,从而在信号的重构中,大的系数比小的系数更重要。

规则二:加权平均法

权重系数可调,适用范围广,可消除部分噪声,源图像信息损失较少,但会造成图像对比度的下降,需要增强图像灰度。

2、基于小波变换的多模态医学图像融合代码实现

我将分享python版本代码来融合多模态MR图像,融合策略是低频图像采用平均值法,高频图像采用最大值法。python版本中需要用到PyWavelets库,可以使用下面命令来安装,具体可以见原文链接。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install PyWavelets

python版本代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pywt
import numpy as np
import SimpleITK as sitk


# This function does the coefficient fusing according to the fusion method
def fuseCoeff(cooef1, cooef2, method):
    if (method == 'mean'):
        cooef = (cooef1 + cooef2) / 2
    elif (method == 'min'):
        cooef = np.minimum(cooef1, cooef2)
    elif (method == 'max'):
        cooef = np.maximum(cooef1, cooef2)
    return cooef

# Params
FUSION_METHOD1 = 'mean'  # Can be 'min' || 'max || anything you choose according theory
FUSION_METHOD2 = 'max'
# Read the two image
I2_itk = sitk.ReadImage("Brats18_2013_1_1_flair.nii.gz", sitk.sitkInt16)
I1_itk = sitk.ReadImage("Brats18_2013_1_1_t1ce.nii.gz", sitk.sitkInt16)
I1 = sitk.GetArrayFromImage(I1_itk)
I2 = sitk.GetArrayFromImage(I2_itk)
# First: Do wavelet transform on each image
wavelet = 'db2'
"""
haar family: haar
db family: db1, db2, db3, db4, db5, db6, db7, db8, db9, db10, db11, db12, db13, db14, db15, db16, db17, db18, db19, db20, db21, db22, db23, db24, db25, db26, db27, db28, db29, db30, db31, db32, db33, db34, db35, db36, db37, db38
sym family: sym2, sym3, sym4, sym5, sym6, sym7, sym8, sym9, sym10, sym11, sym12, sym13, sym14, sym15, sym16, sym17, sym18, sym19, sym20
coif family: coif1, coif2, coif3, coif4, coif5, coif6, coif7, coif8, coif9, coif10, coif11, coif12, coif13, coif14, coif15, coif16, coif17
bior family: bior1.1, bior1.3, bior1.5, bior2.2, bior2.4, bior2.6, bior2.8, bior3.1, bior3.3, bior3.5, bior3.7, bior3.9, bior4.4, bior5.5, bior6.8
rbio family: rbio1.1, rbio1.3, rbio1.5, rbio2.2, rbio2.4, rbio2.6, rbio2.8, rbio3.1, rbio3.3, rbio3.5, rbio3.7, rbio3.9, rbio4.4, rbio5.5, rbio6.8
dmey family: dmey
gaus family: gaus1, gaus2, gaus3, gaus4, gaus5, gaus6, gaus7, gaus8
mexh family: mexh
morl family: morl
cgau family: cgau1, cgau2, cgau3, cgau4, cgau5, cgau6, cgau7, cgau8
shan family: shan
fbsp family: fbsp
cmor family: cmor
"""
cooef1 = pywt.wavedecn(I1[:, :], wavelet)
cooef2 = pywt.wavedecn(I2[:, :], wavelet)

# Second: for each level in both image do the fusion according to the desire option
fusedCooef = []
for i in range(len(cooef1)):
    # The first values in each decomposition is the apprximation values of the top level
    if i == 0:
        fusedCooef.append(fuseCoeff(cooef1[0], cooef2[0], FUSION_METHOD1))
    else:
        c1 = fuseCoeff(cooef1[i]['aad'], cooef2[i]['aad'], FUSION_METHOD2)
        c2 = fuseCoeff(cooef1[i]['ada'], cooef2[i]['ada'], FUSION_METHOD2)
        c3 = fuseCoeff(cooef1[i]['add'], cooef2[i]['add'], FUSION_METHOD2)
        c4 = fuseCoeff(cooef1[i]['daa'], cooef2[i]['daa'], FUSION_METHOD2)
        c5 = fuseCoeff(cooef1[i]['dad'], cooef2[i]['dad'], FUSION_METHOD2)
        c6 = fuseCoeff(cooef1[i]['dda'], cooef2[i]['dda'], FUSION_METHOD2)
        c7 = fuseCoeff(cooef1[i]['ddd'], cooef2[i]['ddd'], FUSION_METHOD2)
        dictobj = {'aad': c1, 'ada': c2, 'add': c3, 'daa': c4, 'dad': c5, 'dda': c6, 'ddd': c7}
        fusedCooef.append(dictobj)
# Third: After we fused the cooefficent we nned to transfor back to get the image
fusedImage = pywt.waverecn(fusedCooef, wavelet)
fusedImage = fusedImage.astype(np.int)
fused_itk = sitk.GetImageFromArray(fusedImage)
fused_itk.SetOrigin(I2_itk.GetOrigin())
fused_itk.SetSpacing(I2_itk.GetSpacing())
fused_itk.SetDirection(I2_itk.GetDirection())
sitk.WriteImage(fused_itk, 'fused_itk.mha')

3、融合结果

下图是T1增强图像和FLAIR图像。

融合结果

如果碰到任何问题,随时留言,我会尽量去回答的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 最新医学影像技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
医学图像处理案例(二十三)——基于cuda的小波变换的3d图像融合
图像融合(Image Fusion)是指将多源信道所采集到的关于同一目标的图像数据经过图像处理和计算机技术等,最大限度的提取各自信道中的有利信息,最后综合成高质量的图像,以提高图像信息的利用率、改善计算机解译精度和可靠性、提升原始图像的空间分辨率和光谱分辨率,利于监测。
医学处理分析专家
2024/04/02
8850
医学图像处理案例(二十三)——基于cuda的小波变换的3d图像融合
医学图像处理案例(十四)——基于小波变换的图像融合
图像融合(Image Fusion)是指将多源信道所采集到的关于同一目标的图像数据经过图像处理和计算机技术等,最大限度的提取各自信道中的有利信息,最后综合成高质量的图像,以提高图像信息的利用率、改善计算机解译精度和可靠性、提升原始图像的空间分辨率和光谱分辨率,利于监测。
医学处理分析专家
2020/06/29
8.6K2
医学图像处理案例(十四)——基于小波变换的图像融合
医学图像处理案例(十六)——基于小波变换和脉冲耦合神经网络的图像融合
小波变换融合算法基本思想:首先对源图像进行小波变换,然后按照一定规则对变换系数进行合并;最后对合并后的系数进行小波逆变换得到融合图像。
医学处理分析专家
2020/06/29
9380
医学图像处理案例(十六)——基于小波变换和脉冲耦合神经网络的图像融合
医学图像处理案例(二十二)——基于cuda的小波变换的图像融合
图像融合(Image Fusion)是指将多源信道所采集到的关于同一目标的图像数据经过图像处理和计算机技术等,最大限度的提取各自信道中的有利信息,最后综合成高质量的图像,以提高图像信息的利用率、改善计算机解译精度和可靠性、提升原始图像的空间分辨率和光谱分辨率,利于监测。
医学处理分析专家
2024/04/02
3020
医学图像处理案例(二十二)——基于cuda的小波变换的图像融合
医学图像处理案例(十七)——基于小波变换和自适应脉冲耦合神经网络的图像融合
小波变换融合算法基本思想:首先对源图像进行小波变换,然后按照一定规则对变换系数进行合并;最后对合并后的系数进行小波逆变换得到融合图像。
医学处理分析专家
2020/06/29
1.3K1
医学图像处理案例(十七)——基于小波变换和自适应脉冲耦合神经网络的图像融合
医学图像处理案例(二十四)——基于cuda小波变换和cuda脉冲耦合神经网络的图像融合
图像融合(Image Fusion)是指将多源信道所采集到的关于同一目标的图像数据经过图像处理和计算机技术等,最大限度的提取各自信道中的有利信息,最后综合成高质量的图像,以提高图像信息的利用率、改善计算机解译精度和可靠性、提升原始图像的空间分辨率和光谱分辨率,利于监测。
医学处理分析专家
2024/04/02
4111
医学图像处理案例(二十)——医学图像处理案例代码详解
在前面分享的医学图像处理案例中,给出了很多具体案例,但有些读者还是渴望可以深入分享案例代码详解。那么今天我将从骨骼分割,气管分割,肺组织分割,血管分割这四个具体案例来详细讲解如何来实现。
医学处理分析专家
2020/06/29
3.9K1
小波变换MATLAB图像融合
图像融合是综合两幅或者多幅图像的信息,以获取同一场景下更加准确、更加全面、更可靠的图像描述。图像融合可以克服单一图像在几何、光谱、和空间分辨率等方面存在的局限性。
巴山学长
2021/07/09
2.1K0
小波变换MATLAB图像融合
时序顶会基础创新知识点-小波变换篇上
前面的文章我们总结了傅立叶变换在时间序列中的应用,但FFT实际有其局限性,所以最近陆续在学习小波变换,感觉小波变换要比傅立叶变换更加复杂,所以预计本篇文章会冗长一些。此外,文章不少代码参考了网络博客,因为博客质量良莠不齐,且不少内容是互相转载,从繁多内容中找到有价值的部分,我花了不少时间。我希望能讲清楚小波变换,此外尽量把参考源写清楚。
科学最Top
2025/04/15
2080
时序顶会基础创新知识点-小波变换篇上
python 小波分解_python低通滤波器
[‘haar’, ‘db’, ‘sym’, ‘coif’, ‘bior’, ‘rbio’, ‘dmey’]
全栈程序员站长
2022/09/27
7080
python 小波分解_python低通滤波器
python小波变换 wavedec2函数 各个返回值详解「建议收藏」
网上找了好多文章都没有提到这个东西,没有说明 wavedec2 函数各个返回值究竟是什么意思
全栈程序员站长
2022/09/06
1.9K0
python小波变换 wavedec2函数 各个返回值详解「建议收藏」
医学图像处理教程(三)——医学图像增强算法
图像对数变换首先将图像从SimpleITK图像数据转成Numpy矩阵数据,然后采用Numpy的log1p()函数来计算数据的log(1+x)变换,由于1+x不能小于零,因此这里我们使用图像减去图像的最小值来计算对数变换结果。
医学处理分析专家
2020/06/29
3.1K0
python 小波包分解_小波分解示意图
由于最近正好在学习用python进行小波分解,看的英文的pywt库的各种属性和方法及其使用示例,在这里记录下来,方便以后查阅,前面的小波分解部分忘了记录了,就只能从小波包分解开始了。 小波包: 首先导入pywt库:
全栈程序员站长
2022/11/17
1.9K0
matlab wavedec2 函数,python小波变换 wavedec2函数 各个返回值详解
网上找了好多文章都没有提到这个东西,没有说明 wavedec2 函数各个返回值究竟是什么意思
全栈程序员站长
2022/09/07
1.1K0
图像的变换——dwt、idwt、wcodemat、dwt2、idwt2、wavedec2、waverec2
wavelet 小波 decomposition 分解 approximation 近似值 coefficient 系数 discrete 离散的 low-pass filter 低通滤波器 high-pass filter 高通滤波器 orthogonal 正交的
全栈程序员站长
2022/09/15
2.3K0
图像的变换——dwt、idwt、wcodemat、dwt2、idwt2、wavedec2、waverec2
像素级压缩感知图像融合的论文
2012 基于压缩感知理论的图像融合方法 不同的是在测量前先对稀疏矩阵进行融合,从仿真结果来看效果并不是很好,仅做介绍。 2012 一种基于小波稀疏基的压缩感知图像融合算法 针对图像小波分解系数特点,
闪电gogogo
2018/04/02
1.1K0
像素级压缩感知图像融合的论文
思维的碰撞:小波变换偶遇深度学习
现有的基于深度学习的图像超分往往采用更深、更宽的架构提升重建图像质量,这就导致了更大的计算量、更慢的推理速度。尽管也有研究员设计轻量型网络用语图像超分,但往往造成性能损失。
AIWalker
2021/04/29
1.7K0
思维的碰撞:小波变换偶遇深度学习
小波变换编码
import cv2 import numpy as np import matplotlib.pyplot as plt from pywt import dwt2, idwt2 def put(path): #0是表示直接读取灰度图 img=cv2.imread(path, 0) #对img进行haar小波变换 cA,(cH,cV,cD)=dwt2(img,'haar') #小波变换之后,低频分量对应的图像: a=np.uint8(cA/np.m
裴来凡
2022/05/29
5910
小波变换编码
Matlab系列之小波分析基础
原本想把MATLAB里关于概率论的相关进行记录,不过概率论学得不好,感觉在该部分的表达上还存在很大不足,就放弃了相关的篇章,直接开始了本篇,本篇主要是记录小波分析的一些东西,小波分析的原理就不细说了,所以还是老样子,主要介绍小波分析在MATLAB中的相关知识,不足之处请指出。
狂人V
2020/12/22
5.7K0
Matlab系列之小波分析基础
Matlab系列之小波分析应用:图像去噪与压缩
本篇把小波分析应用在图像处理中的去噪以及压缩进行了简单介绍与实例应用,不过由于知识储备还有限,有些专业知识还是无法详细的表述出来,所以感兴趣的需要自行查资料学习了,公式看多了,看着是真滴懵.....
狂人V
2021/01/08
2K0
推荐阅读
相关推荐
医学图像处理案例(二十三)——基于cuda的小波变换的3d图像融合
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验