# 医学图像处理案例（十六）——基于小波变换和脉冲耦合神经网络的图像融合

1、小波变换融合回顾

1.1、小波分解原理简介

LL：水平低频，垂直低频

LH：水平低频，垂直高频

HL：水平高频，垂直低频

HH：水平高频，垂直高频

1.2、融合规则

2、脉冲耦合神经网络（PCNN）介绍

PCNN模型是由很多神经元相互连接而形成的单层循环网络，其中单个神经元是由接收区域、耦合调制域和脉冲发生域组成，单个神经元模型如下图所示。

3、基于小波变换和脉冲耦合神经网络的图像融合代码实现

`pip install PyWavelets`

python版本代码：

```import pywt
import cv2
import numpy as np
import math
from scipy import signal

"""
PCNN generate fire maps image
:param img:source image
:param iteration:pcnn iteration number
:return:fire maps image
"""
m, n = np.shape(img)[0], np.shape(img)[1]
alpha_L = 1
alpha_Theta = 0.2
vL = 1.0
vTheta = 20
if i == center_x and j == center_y:
W[i, j] = 0
else:
W[i, j] = 1. / math.sqrt(pow(i - center_x, 2) + pow(j - center_y, 2))

imgf = img.astype(np.float)
F = abs(imgf)
L = np.zeros((m, n))
Y = np.zeros((m, n))
Theta = np.zeros((m, n))
img_pcnn = np.zeros((m, n))

for i in range(iteration):
K = signal.convolve2d(Y, W, mode='same')
L = math.exp(-alpha_L) * L + vL * K
Theta = math.exp(-alpha_Theta) * Theta + vTheta * Y
U = np.multiply(F, 1 + np.multiply(beta, L))
Y = U > Theta
Yf = Y.astype(np.float)
img_pcnn = img_pcnn + Yf
return img_pcnn

# 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)
elif (method == 'pcnn'):
pcnn1 = pcnn(cooef1, 5, 0.1, 200)
pcnn2 = pcnn(cooef2, 5, 0.1, 200)
pcnn_cooef = np.maximum(pcnn1, pcnn2)
cooef1[pcnn1 != pcnn_cooef] = 0
cooef2[pcnn2 != pcnn_cooef] = 0
cooef = cooef1 + cooef2
return cooef

# Params
FUSION_METHOD = 'mean'  # Can be 'min' || 'max || anything you choose according theory
FUSION_METHOD1 = 'pcnn'
# First: Do wavelet transform on each image
wavelet = 'db2'
cooef1 = pywt.wavedec2(I1[:, :], wavelet, level=1)
cooef2 = pywt.wavedec2(I2[:, :], wavelet, level=1)
# 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_METHOD))
else:
# For the rest of the levels we have tupels with 3 coeeficents
c1 = fuseCoeff(cooef1[i][0], cooef2[i][0], FUSION_METHOD1)
c2 = fuseCoeff(cooef1[i][1], cooef2[i][1], FUSION_METHOD1)
c3 = fuseCoeff(cooef1[i][2], cooef2[i][2], FUSION_METHOD1)
fusedCooef.append((c1, c2, c3))
# Third: After we fused the cooefficent we nned to transfor back to get the image
fusedImage = pywt.waverec2(fusedCooef, wavelet)
# Forth: normmalize values to be in uint8
fusedImage1 = np.multiply(np.divide(fusedImage - np.min(fusedImage), (np.max(fusedImage) - np.min(fusedImage))), 255)
fusedImage1 = fusedImage1.astype(np.uint8)
# Fith: Show image
cv2.imwrite("win.bmp", fusedImage1)```

4、融合结果

0 条评论

• ### 医学图像处理案例（十七）——基于小波变换和自适应脉冲耦合神经网络的图像融合

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

• ### Tensorflow入门教程(三十）——如何准备图像分割数据

前面分享的文章中大都是以深度分割模型为主，有很多朋友都在问我关于训练数据是如何准备，之前我都是直接把每个案例的训练数据分享给大家，今天我将分享一个在图像分割任务...

• ### 深度学习在医学影像上的应用（二）——图像重建及后处理，标注，回归，配准，图像超分辨率

上一篇给大家介绍了深度学习在医学影像上分类的应用案例，这一篇我将分享深度学习在医学影像上关于图像重建及后处理，图像标注，图像配准，图像超分辨率和回归的应用。

• ### 医学图像处理案例（十七）——基于小波变换和自适应脉冲耦合神经网络的图像融合

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

• ### 雅可比矩阵（二）

假设在物理坐标系中由曲线y=x,y=3x,xy=1,xy=5围成一个单元区域D。如图所示： ? 四个点的坐标分别为 ? 要求该区域的面积，常规的做法是在默认的...

• ### SAP S/4HANA生产订单创建之后，为什么会自动执行action

版权声明：本文为博主汪子熙原创文章，未经博主允许不得转载。 https://jerry.bl...

• ### 肿瘤研究中加入m6A热点发表15分文章是什么水平？

胃癌(GC)虽然根治性切除和全身化疗已经有了很大的改善，但由于恶性增殖和转移，其预后仍然很差。因此，迫切需要阐明胃癌进展的潜在分子机制，这将有助于靶向治疗的发展...

• ### 面试官：你说你会RabbitMQ，那聊聊它的交换机（Exchange）吧

本文中我们主要讲前三种Exchange方式，相信凭借着我简练的文字和灵魂的画技给大家好好讲讲，争取老妪能解。

• ### 12，模块和包

在命令行中使用 pip命令,也可以在 Jupyter notebook 中加！调用命令行指令。 pip:破壳而出。