生活随笔
收集整理的這篇文章主要介紹了
                                
【MATLAB图像融合】[18]双通道PCNN模型实现图像融合
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
 
                                
                            
                            
                            引言
 
簡單回顧一下以往的單通道PCNN模型,原理與實現步驟:
 13、單通道PCNN原理
 14、單通道PCNN融合代碼實現
 
一、單通道PCNN
 
圖1 單通道PCNN:
 在單通道PCNN中,對于一個神經元的一次迭代過程正如圖1描述:
 ①、F(i,j)代表外部刺激,在傳統模型中這一刺激都是由I(i,j)提供,像素的灰度值直接作為神經元的刺激,在后來的研究中逐漸發現這樣做不利于表達像素空間關系,從而使用各種算子代替I(i,j)成為外部刺激,在接收部分中除了外部刺激,還有“內部刺激”,這一刺激來自于上一次迭代的結果以及其他神經元上次迭代的結果,根據一定的權重共同組成“內部刺激”,注意,這一名詞并不通用,僅用于理解。
 ②、調制部分是PCNN內部最重要思想體現,通過接收到的外部刺激與內部刺激,神經元產生了內部活動,內部活動在公式中被命名為U,它實質上是一個計算,將內部刺激視為權值,再結合β這個鏈接強度決定內部刺激這一權值在內部活動中的重要性,完后一個計算,將外部刺激轉換為內部活動值F(i,j)→U(i,j)。
 ③、設定一個閾值,當內部活動的值大于這個閾值,就產生一個脈沖信號,這一部分就叫做脈沖產生部分,在離散的計算中,產生的脈沖信號就是1。閾值并不是一成不變的,通常選定一個初始閾值,如果內部活動U遲遲不能大于閾值,已經預先選擇好的線性衰減系數或指數衰減系數令這個閾值衰減,閾值越來越小,終于U可以大于閾值T了,當產生脈沖信號后,閾值T立刻增大到這個值(初始閾值T加上上次U大于T時的T值),顯然此時T>=初始T。
 綜上所述,我們還是喜歡數學表達式:
 
 
二、雙通道PCNN
 
雙通道PCNN其原理與單通道其實類似,我們在使用單通道PCNN進行圖像融合時,需要對兩幅圖像分別進行PCNN的點火,得到點火圖之后通常根據極大值原則便確立融合決策圖。此時我們的PCNN模型需要獨立運行兩次–PCNN本身就是迭代計算的,所以運行2次會產生較大的計算開銷,這是第一點。第二點就是兩個PCNN各自點各自的火,耦合性質只體現在每幅圖像內部像素點之間,而圖像之間并不存在耦合性。
 說了這么多就是為了引出本文的雙通道PCNN,它主要是針對上述兩點問題而提出的一種“新型”PCNN模型,且提出很久了,分析它的結構,我們還可以做出三通道、四通道PCNN。
 
圖2 雙通道PCNN:與單通道一樣,雙通道同樣有3個部分來描述單個神經元的單次運行,如圖2。
 ①、我們在一種定義了外部刺激與內部刺激。在接收部分中,雙通道與單通道在內部刺激的接收中是沒有區別的,區別在于外部刺激同時接收雙線信號:I1與I2,分別表示2個不同的外部刺激,在后面的調制部分中,也將變成兩條并行的線路同時計算,增加I的數量,可以類似定義三通道、四通道PCNN。
 ②、在①中,我們將外部刺激I1與內部刺激結合,可以形成路線1;將外部刺激I2與內部刺激結合,可以形成路線2。這兩路同時做U內部活動的計算,但是內部活動U向第三部分脈沖部分進行的時候,只輸出一個值,兩路產生2個內部活動值,此時,取最大值流入第三部分是它與單通道最大的不同。
 ③、在經過步驟①②之后,第三部分的工作原理與單通道也是完全一致的。
 ④、需要注意的是,大體框架雖然沒有區別,但是根據用法的不同,實際上的PCNN模型可以做許多微調,比如內部刺激,我們通常采用窗口內神經元的上次迭代值來輔助決策內部刺激,但是有許多成功的dual-PCNN并不采用窗口,而是簡單地定義為0或1,。這是出于這樣的考慮:
 觀察這兩行公式,L是一個只與前次L和前次Y相關的一個變量,它并不受外部刺激的影響,而在U中,L作為一個數字,還要和β相乘。β的值要么是固定值,要么是自適應,分開討論:當β是定值,β相當于常數可以直接乘在第一行的L公式里面,L不具備自適應特性,對于單次計算來說,L也是一個固定值,此時β對機制的調節作用要明顯于L,此時應當維持原公式不變化;當β是自適應的時候,βL反而會變成一個不確定的值,既然L對機制的調節作用不如β重要,確定了一個β,但是βL整體是不可控的,這對機制的把握其實是不利的,在β不能自適應的時候,我們要依賴L,但是現在β自適應了,L的不確定反而會影響β,因此在很多案例中,把βL作為一個整體去優化,而不單單優化β,因為只優化β依然無法完全控制機制。
 基于上面的分析,在雙通道PCNN中,既然強調的是2個外部刺激之間的耦合性,那也可以舍棄一定的神經元之間的耦合性,這相當于強化d-PCNN的特性,最終,L被簡化為了一個0/1的常數。
 這只是一個舉例,我們分別給出一個常規雙通道PCNN的數學定義,和一個流行的雙通道PCNN的數學定義:
 常規PCNN
 
 流行PCNN
 
 三、代碼及分析
 
clc
;clear
;close all
;
A
=imread('05A.jpg');A
=double(A
);
B
=imread('05B.jpg');B
=double(B
);C
=dual_PCNN(A
,B
);
figure
;imshow(A
,[]);
figure
;imshow(B
,[]);
figure
;imshow(C
,[]);function R
=dual_PCNN(matrixA
,matrixB
)L1
=[-1,-1,-1;-1,8,-1;-1,-1,-1];AA
=conv2(matrixA
,L1
,'same');BB
=conv2(matrixB
,L1
,'same');[p
,q
]=size(matrixA
);F_NA
=Normalized(matrixA
);F_NB
=Normalized(matrixB
);L
=zeros(p
,q
);U
=zeros(p
,q
);Y
=zeros(p
,q
);Y0
=zeros(p
,q
);Theta
=zeros(p
,q
);betaA
=AA
;betaB
=BB
;con
=ones(p
,q
);fuse
=zeros(p
,q
);np
=200;alpha_Theta
=0.2;vTheta
=20;for n
=1:np
if sum(sum(Y
))<=0L
=zeros(p
,q
);else  L
=ones(p
,q
);endTheta
=exp(-alpha_Theta
)*Theta
+vTheta
*Y
;U
=max(F_NA
.*(con
+betaA
.*L
),F_NB
.*(con
+betaB
.*L
));Y
=im2double(U
>Theta
);Y0
=Y0
+Y
;   end
for i 
= 1:p
for j 
= 1:q
if(F_NA(i
,j
)*(1+betaA(i
,j
)*L(i
,j
)) == U(i
,j 
))fuse(i
,j
) = matrixA(i
,j
);elseif(F_NB(i
,j
)*(1+betaB(i
,j
)*L(i
,j
)) == U(i
,j
))fuse(i
,j
) = matrixB(i
,j
);endendendend
R
=fuse
;
end
function normalized_matrix
=Normalized(matrix
)input_matrix
=abs(matrix
);Max_input
=max(input_matrix(:));Min_input
=min(input_matrix(:));min_matrix
=ones(size(input_matrix
)).*Min_input
;normalized_matrix
=(input_matrix
-min_matrix
)./(Max_input
-Min_input
+eps
);
end
 
 可以看到,效果還不錯,下面補一個單通道的測試結果:
 
clc
;clear
;close all
;im
=imread('05A.jpg');
im
=double(im
);im2
=imread('05B.jpg');
im2
=double(im2
);
link_arrange
=3;
iteration_times
=300;firing_times1
=PCNN_large_arrange(im
,link_arrange
,iteration_times
);
firing_times2
=PCNN_large_arrange(im2
,link_arrange
,iteration_times
);
[m
,n
]=size(im2
);
for i
=1:m
for j
=1:n
if firing_times1
>=firing_times2
fuse(i
,j
)=im(i
,j
);elsefuse(i
,j
)=im2(i
,j
);endend
end
figure
;imshow(im
,[]);
figure
;imshow(im2
,[]);
figure
;imshow(fuse
,[]);function R
=PCNN_large_arrange(matrix
,link_arrange
,np
)
F_NA
=Normalized(matrix
);
disp('PCNN is processing...')
[p
,q
]=size(matrix
);alpha_L
=1;
alpha_Theta
=0.2;beta
=3;
vL
=1.00;
vTheta
=10;
% Generate the 
null matrix that could be used
L
=zeros(p
,q
);
U
=zeros(p
,q
);
Y
=zeros(p
,q
);
Y0
=zeros(p
,q
);
Theta
=zeros(p
,q
);
% Compute the linking strength
.
center_x
=round(link_arrange
/2);
center_y
=round(link_arrange
/2);
W
=zeros(link_arrange
,link_arrange
);
for i
=1:link_arrange
for j
=1:link_arrange
if (i
==center_x
)&&(j
==center_y
)W(i
,j
)=0;elseW(i
,j
)=1./sqrt((i
-center_x
).^2+(j
-center_y
).^2);endend
endF
=F_NA
;
for n
=1:npK
=conv2(Y
,W
,'same');L
=exp(-alpha_L
)*L
+vL
*K
;Theta
=exp(-alpha_Theta
)*Theta
+vTheta
*Y
;U
=F
.*(1+beta
*L
);Y
=im2double(U
>Theta
);Y0
=Y0
+Y
;   
end
R
=Y0
;
end
function [normalized_matrix
,cmin
,cmax
]=Normalized(matrix
)
input_matrix
=abs(matrix
);
Max_input
=max(input_matrix(:));
Min_input
=min(input_matrix(:));
min_matrix
=ones(size(input_matrix
)).*Min_input
;
normalized_matrix
=(input_matrix
-min_matrix
)./(Max_input
-Min_input
+eps
);
cmin
=Min_input
;
cmax
=Max_input
;
end 
                            總結
                            
                                以上是生活随笔為你收集整理的【MATLAB图像融合】[18]双通道PCNN模型实现图像融合的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。