一、區域分割影像融合簡介
影像的分解
對源影像進行融合時,首先對影像進行分解,利用拉普拉斯金字塔分解,先對影像進行高斯金字塔分解,然后再進行拉普拉斯金字塔分解,
1 高斯金字塔分解
記源影像為G0,G0即為高斯金字塔最底層,將其進行高斯低通濾波,之后對其進行隔行隔列的下采樣,得到的影像與源影像在較低解析度上近似,解析度是源圖的一半(高斯金字塔的第一層G1),重復上述操作,得到下一層高斯金字塔,反復進行上述操作,得到若干層,即構成高斯金字塔,假設高斯金字塔的第l層影像為Gl:


2 拉普拉斯金字塔分解
將上述得到的高斯金字塔利用插值法進行插值,膨脹后的影像Gl的尺寸與第l-1層影像Gl-1尺寸相同,如式(13)所示:

3 彩色影像融合
基于S-PCNN+區域熵(Local Entropy,LE)與拉普拉斯金字塔的融合,在一般RGB格式影像中,對每個分量進行處理時,由于三個分量的相關性很大,不易對特定因素進行處理,所以對影像進行融合時,為了得到較好的效果和有效的處理方式,先將RGB影像轉換為HSI影像,得到H、S、I三個分量,再分別對三個分量進行相關的處理與融合,
對于H分量,送入S-PCNN模型,經過迭代得到振蕩頻圖(Oscillation Frequency Graph,OFG),再對其得到的振蕩頻圖(OFG)進行區域熵(LE)的計算,得到OFG區域熵矩陣作為H分量的特征矩陣,最后根據不同的源影像的H分量對應像素區域熵的大小,取其LE較大的像素作為最終融合所取的像素,
影像的區域熵由下式表述:

其中:Pk=h(k)/(m×n),m×n表示像素I(i,j)的鄰域,h(k)表示鄰域的直方圖,pi為鄰域的歸一化直方圖,K表示鄰域像素的最大灰度值,
對于S分量和I分量,對其進行拉普拉斯金字塔分解,然后用不同的策略對經分解處理后的金字塔子層影像進行融合,在金字塔低層的影像,用區域熵來作為決策準則選取融合系數,高層金字塔影像通過S-PCNN模型來選取融合系數,本文采用的融合演算法是基于簡化脈沖耦合神經元的神經網路模型(S-PCNN),S-PCNN模型每次迭代后,經過判斷每個像素對應的神經元是否點火,可以輸出一幅二值脈沖影像,這些二值影像包含了影像的一些特征資訊,在S-PCNN網路的N次迭代運算中,對每個影像I的像素I(i,j)對應的神經元N(i,j)發出脈沖進行統計后可得到一幅振蕩頻圖(OFG),將OFG記為ION,則可用式(16)計算得到:

根據分析統計每個像素點的點火次數,再通過計算其區域熵(LE)來選取源影像的包含更多資訊的更清晰區域,作為融合部分進行最終的影像融合,經S-PCNN模型迭代后的圖可以展現影像的主要細節資訊,
源影像經拉普拉斯金字塔分解,得到許多在不同空間頻帶上的子影像,由于在各個頻帶上的影像包含的特征和細節不同,所以對不同頻帶上的子影像進行融合時采用的融合策略也不相同,對金字塔的低層0~N,區域能量能衡量影像的質量,采用區域能量的方式選取系數,其計算公式如下:

影像融合后的結果如下式所示:

其中0≤l<N,
分別用上式計算獲得金字塔的各層影像,融合后的影像LF1,LF2,LF3,…,LFN,通過式(14)可以重構出最終的融合影像,由于拉普拉斯金字塔高層影像含有源影像的細節資訊及紋理和邊緣資訊,S-PCNN在提取影像紋理細節、區域分布等方面表現出色,所以對于高層的拉普拉斯金字塔影像則采用的S-PCNN模型來選取系數,
本文提出的彩色影像融合演算法流程如圖2所示,

圖2 融合演算法流程
結合演算法流程,下面說明演算法具體步驟:
1)將源彩色影像從RGB空間轉換到HSI彩色空間,得到H、S、I三個分量,
2)將分離出的H分量送入S-PCNN模型,經過迭代后得到振蕩頻圖(OFG);再對其進行區域熵(LE)的計算,得到OFG區域熵矩陣作為H分量的特征矩陣;最后根據不同源影像的H分量的對應像素的區域熵大小,取其LE較大的像素作為最終融合所取的像素,
3)將S、I分量進行拉普拉斯金字塔分解,對其用本文彩色影像融合部分表述的方式進行融合,
4)融合后的H、I、S分量得到HSI彩色影像,逆轉換為RGB得到最終影像,
二、部分源代碼
clear all;
clc;
leftImage = double(imread('apple.png'));
rightImage = double(imread('orange.png'));
iternum = 5;
if (size(leftImage) ~= size(rightImage))
error('Input images are not the same size!')
end
% 預處理,使圖片height,width為偶數
[rows, cols, channels] = size(leftImage);
% mask gaussian
mask = double(zeros(rows, cols, channels));
mask(:, 1:floor(cols/2), :) = ones(rows, floor(cols/2), channels);
mask_pyramid = GaussianPyramid(mask, iternum);
% leftImage pyramid and rightImage pyramid
left_pyramid = LaplacianPyramid(leftImage, iternum);
right_pyramid = LaplacianPyramid(rightImage, iternum);
% TODO: get blend laplacian pyramid
blend_pyramid = cell(iternum, 1);
for i = 1:iternum
blend_pyramid{i} = left_pyramid{i} .* mask_pyramid{i} + right_pyramid{i} .* (1 - mask_pyramid{i});
end
% reconstruct the blend image
blendImage = LaplacianReconstruct(blend_pyramid);
imwrite(uint8(blendImage), 'blendImage.png');
figure;
imshow(uint8(leftImage));
title('leftImage');
figure;
imshow(uint8(rightImage));
title('rightImage');
figure;
imshow('blendImage.png');
title('blendImage');
function up_image=UpSampling(image)
[rows, cols, channels] = size(image);
up_image = double(zeros(rows*2, cols*2, channels));
up_image(1:2:rows*2, 1:2:cols*2, :) = image;
% up_image(2:2:rows*2, 2:2:cols*2, :) = image;
% up_image(1:2:rows*2, 2:2:cols*2, :) = image;
% up_image(2:2:rows*2, 1:2:cols*2, :) = image;
三、運行結果



四、matlab版本及參考文獻
1 matlab版本
2014a
2 參考文獻
[1] 蔡利梅.MATLAB影像處理——理論、演算法與實體分析[M].清華大學出版社,2020.
[2]楊丹,趙海濱,龍哲.MATLAB影像處理實體詳解[M].清華大學出版社,2013.
[3]周品.MATLAB影像處理與圖形用戶界面設計[M].清華大學出版社,2013.
[4]劉成龍.精通MATLAB影像處理[M].清華大學出版社,2015.
[5]賀康建,金鑫,聶仁燦,周冬明,王佺,余介夫.基于簡化脈沖耦合神經網路與拉普拉斯金字塔分解的彩色影像融合[J].
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/355423.html
標籤:其他
