【图像分割】基于matlab粒子群算法优化模拟退火算法图像分割【含Matlab源码 2020期】
一、粒子群算法優化模擬退火算法圖像分割簡介(具體理論見參考文獻)
1基于模擬退火思想的粒子群算法
1.1 基本PSO算法
首先, 粒子群算法是由Eberhan博士和Kennedy博士最先提出的全局優化進化算法。該算法源于對鳥群捕食行為的靈感, 其基本思想是通過群體中個體之間的協作和共享來尋求最優解。
粒子群算法中, 每個優化問題的解看作是搜索空間中的一只鳥, 稱之為“粒子"。鳥被抽象為沒有質量和體積的微粒 (點) , 并將其延伸到N維空間, 粒子i在N維空間里的位置表示為矢量Xi= (xi1, xi2, …, xiN) , 飛行速度表示為矢量Vi= (vi1, vi2, …, viN) , 每個粒子都有一個由目標函數決定的適應值 (FitnessValue) , 并且知道自己到目前為止發現的最好位置pbest和現在的位置Xi, 這個可以看作是粒子自己的飛行經驗。除此之外, 每個粒子還知道到目前為止整個群體中所有粒子發現的最好位置gbest (gbest是pbest中的最好值) 。這個可以看作是粒子同伴的經驗。粒子就是通過自己的經驗和同伴中最好的經驗來決定下一步的運動。
對于第k次迭代, PSO中的每一個粒子是按照式 (1) 和式 (2) 進行變化的。
粒子通過不斷的學習更新, 最終飛向解空間中最優解所在位置, 搜索過程結束。最后輸出的g是全局最優解。在更新過程中, 粒子每一維的速率被限制到vmin-vmax之內。
1.2 模擬退火思想的粒子群算法 (SAPSO)
基本粒子群優化算法中, 雖然粒子速度作了限制, 不會變化太大, 但位置更新時未作限制, 就有可能新的位置會變得很壞, 引起收斂速度緩慢, 所以要對更新的位置作限制。限制的思路有兩種方法:一種類似于速度的限制方法, 給每一維變量限制一個范圍;另一種思路采用模擬退火算法思想, 模擬退火算法用于優化問題的出發點是基于物理中固體物質的退火過程與一般優化算法的相似性。算法的基本思想是從一給定解開始的, 從鄰域中隨機產生另一個解, 接受準則允許目標函數在有限范圍內變壞, 它由一控制參數t決定, 其作用類似于物理過程中的溫度T, 對于控制參數t的每一取值, 算法持續進行“產生新解—判斷—接受或舍棄”的迭代過程, 對應著固體在某一恒定溫度下趨于熱平衡的過程。經過大量的解變換后, 可以求得給定控制參數t值時優化問題的相對最優解。然后減小控制參數t的值, 重復執行上述迭代過程。當控制參數逐漸減少并趨于零時, 系統也越來越趨于平衡狀態, 最后系統狀態對應于優化問題的整體最優解, 該過程也稱冷卻過程[8]。
方法1: 在基本粒子群算法的基礎上, 在更新當前位置時, 把它限制在xmin-xmax內。
采用模擬退火算法思想有3種方法改進, (在此以求目標函數的極小值為例, 即適應值越小越好) 分析如下:
方法2:按式 (2) , 計算新的位置, 然后計算兩個位置所引起的適應值的變化量ΔE;若ΔE≤0, 接受新值, 否則若exp (-ΔE/T) >rand (0, 1) 也接受新值。其中rand (0, 1) 表示0-1之間的隨機數, T是起始溫度, α為退火系數。否則就拒絕。
方法3: 接受準則允許目標函數在有限范圍內變壞, 并不直接按概率取舍, 而是按ΔE<e, e為按允許目標函數變壞的范圍。
方法SAPSO:把方法1與方法3結合在一起, 現提出一種基于模擬退火思想微粒群算法 (SAPSO) , 既限定位置的范圍, 又設定允許目標函數變壞的范圍e, 接受準則允許目標函數在有限范圍內變壞, 即若ΔE<e, 就接受新值, 否則就拒絕。把SAPSO方法結合最大類間方差法應用于圖像分割, 這充分發揮了模擬退火、PSO、最大類間方差法三種算法的優勢, 非線性快速且穩定地求解最大類間方差及對應的灰度閾值, 在取得較好的圖像分割效果的同時, 顯著地提高了計算速度。
2基于模擬退火思想的PSO算法用于圖像分割
2.1 最大類間方差分割方法
最大類間方差閾值分割法的基本思路是將直方圖在某一閾值處分割成兩組, 計算兩組的方差信息, 因為方差是灰度分布均勻性的一種度量, 方差值越大, 說明構成圖像的兩部分差別越大, 當部分目標錯分為背景或部分背景錯分為目標都會導致兩部分差別變小, 因此使類間方差最大的分割意味著錯分概率最小, 此時的閾值即為最佳閾值。
最大類間方差法以式 (3) :
2.2采用SAPSO算法優化最大類間方差分割法的具體實現
從上面討論可以看出, 最大類間方差法的計算量很大, 嚴重影響了閾值的選取效率, 難以滿足圖像分割的實時處理要求和大幅圖像處理的需要。由于最大類間方差法實際上也是一種尋優方法, 所以文中使用前文提出的SAPSO算法優化最大類間方差法的尋優過程。
2.2.1 SAPSO算法流程
下面是SAPSO算法的基本步驟:
初始化:設定微粒群規模M, 每個微粒代表 (0~L-1) 區間內的某個灰度值, 其中L為需要處理圖像的灰度級。隨機對微粒群各微粒的初始位置和速度進行初始設定, 預先設定算法的運行參數。
根據式 (1) 和式 (2) , 由當前位置和速度產生各個微粒的新的位置。并且計算微粒群中每個微粒的當前最好位置pbest和全局最好位置gbest。
While (不滿足迭代終止條件) do
選擇式 (3) 的F (k) 作為微粒群算法的適應函數, 計算每個粒子新位置的適應值。
對各個微粒, 將其適應值與所經歷過的最好位置pbest的適應值進行比較, 若較好, 則將其作為當前的最好位置;根據各個微粒的個體極值pbest找到全局最好位置gbest。對適應值進行比較, 若較好, 則將其作為當前的全局最好位置。進行一步迭代。
根據式 (1) 進化每個微粒的Vi, 并把它限制在vmax內。
根據式 (2) 進化每個微粒的Xi, 并把它限制在0~L-1內。
計算兩個位置所引起的適應值的變化量ΔE;若ΔE>-e, e為允許目標函數變壞范圍, 接受新值;否則就拒絕, xk+1仍為xk。
End
f (i, j) =1;f (i, j) ≥K
f (i, j) =0;f (i, j) <K
通常, 用f (i, j) =1的部分表示圖像, 用f (i, j) =0的部分表示背景。
2.2.2 SAPSO算法的主要參數的選擇
雖然粒子群算法發展迅速并取得了可觀的研究成果, 但其理論基礎仍相對薄弱, 尤其是算法基本模型中的參數設置和優化問題還缺乏成熟的理論論證和研究。目前比較通用的參數設置方法是經驗法和實驗法。
粒子群規模的選擇, A EI-Gallad 在其研究論文中利用統計方法分析了微粒群規模、速度極限和迭代次數對算法性能的影響, 但是這三個參數與具體問題的特性密切相關, 文中算法經過實驗得到粒子數為5比較合適。
慣性權重w、加速常數c1、c2和最大速度vmax共同維護微粒對全局和局部搜索能力的平衡。這四個算法參數的設置與具體問題密切相關, 目前比較常用的方法是針對具體求解問題, 利用充分的實驗來確定。
加速常數c1、c2, 低的值允許微粒在被拉回之前可以在目標區域外徘徊, 而高的值則導致微粒突然地沖向或越過目標區域, 一般都取2, 不過在文獻中也有其它的取值, 但一般c1=c2并且范圍在0~4之間[11], J Kennedy和R Eberhart曾在論文中建議設置c1=c2=2以保證式 (1) 中的隨機乘積均值等于1, 文中算法中統一取c1=c2=2。
慣性權重因子w使微粒保持運動慣性, 使微粒有擴展搜索空間的趨勢, 有能力探索新的區域。在此取值與經典粒子群算法一致, w=1。
速度限制最大值vmax決定當前位置與最好位置之間的區域的分辨率 (或精度) 。如果vmax太高, 微粒可能會飛過好解;如果vmax太小, 微粒不能在局部好區間之外進行足夠的探索, 導致陷入局部優值。
該限制有3個目的:
(1) 防止計算溢出;
(2) 實現人工學習和態度轉變;
(3) 決定問題空間搜索的粒度。在此取vmax=4。
粒子長度, 由優化問題決定, 就是問題解的長度, 粒子的范圍, 文中粒子位置代表閾值, 對于灰度級為L的圖像, 閾值范圍在0~ (L-1) , 故位置限制最小值xmin=0, 位置限制最大值xmax=L-1。
模擬退火算法所用到的參數, 初始溫度T和退溫方式對算法的優化性能具有一定影響, 在此采用如下經驗公式[16]:T=-fpg/ln (0.2) , Tk+1=α*Tk, 其中, fpg為初始種群中最佳微粒的目標值, α為退火系數。
二、部分源代碼
%% Cleaning the Stage
clc;
clear;
close all;
warning(‘off’);
%% Reading Image
MainOrg=imread(‘tst.jpg’);
Gray=rgb2gray(MainOrg);
InpMat= double(MainOrg);
%% Basics
[s1,s2,s3]=size(InpMat);
R = InpMat(:,:,1);
G = InpMat(:,:,2);
B = InpMat(:,:,3);
X1 = (R-min(R(😃))/(max(R(😃)-min(R(😃));
X2 = (G-min(G(😃))/(max(G(😃)-min(G(😃));
X3 = (B-min(B(😃))/(max(B(😃)-min(B(😃));
X = [X1(😃 X2(😃 X3(😃];
%% Cluster Numbers
clusteres = 7;
%% Cost Function and Parameters
% Cost Function
CostFunction=@(m) CLuCosPSOSA(m, X, clusteres);
% Decision Variables
VarSize=[clusteres size(X,2)];
% Number of Decision Variables
nVar=prod(VarSize);
% Lower Bound of Variables
VarMin= repmat(min(X),1,clusteres);
% Upper Bound of Variables
VarMax= repmat(max(X),1,clusteres);
%% PSO-SA Clustering Option and Run
% PSO-SA Options
% Iterations (more value means: slower runtime but, better result)
Itr=50;
% SA solver + PSO body
SA_opts = optimoptions(‘simulannealbnd’,‘display’,‘iter’,‘MaxTime’,Itr,‘PlotFcn’,@pswplotbestf);
options.SwarmSize = 250;
% PSO-SA Run
disp(['SA-PSO Segmentation Is Started … ']);
[centers, Error] = particleswarm(CostFunction, nVar,VarMin,VarMax,SA_opts);
disp(['SA-PSO Segmentation Is Ended. ']);
%% Calculate Distance Matrix
% Create the Cluster Center
g=reshape(centers,3,clusteres)';
% Create a Distance Matrix
d = pdist2(X, g);
% Assign Clusters and Find Closest Distances
[dmin, ind] = min(d, [], 2);
% Sum of Cluster Distance
WCD = sum(dmin);
% Fitness Function of Centers Sum
z=WCD;
% Final Segmented Image
SA_Segmented=reshape(ind,s1,s2);
PSOSAuint=uint8(SA_Segmented);
ColorSeg = labeloverlay(Gray,PSOSAuint);
%
medgray = medfilt2(SA_Segmented,[5 5]);
%
redChannel = ColorSeg(:,:,1); % Red channel
greenChannel = ColorSeg(:,:,2); % Green channel
blueChannel = ColorSeg(:,:,3); % Blue channel
medcolor1 = medfilt2(redChannel,[4 6]);
medcolor2 = medfilt2(greenChannel,[4 6]);
medcolor3 = medfilt2(blueChannel,[4 6]);
medrgb = cat(3, medcolor1, medcolor2, medcolor3);
%% Plot PSO-SA Segmented Result
disp(['Error Is: ’ num2str(Error)]);
figure(‘units’,‘normalized’,‘outerposition’,[0 0 1 1])
subplot(2,3,1)
subimage(MainOrg);title(‘原始’);
subplot(2,3,2)
subimage(Gray);title(‘灰色’);
subplot(2,3,3)
imshow(SA_Segmented,[]);
title(['粒子群算法優化模擬退火算法灰色分段, 集群 = ’ num2str(clusteres)]);
subplot(2,3,4)
imshow(ColorSeg,[]);
title(['粒子群算法優化模擬退火算法彩色分段, 集群 = ’ num2str(clusteres)]);
subplot(2,3,5)
imshow(medgray,[]);
title(['粒子群算法優化模擬退火算法灰色中值濾波 ']);
subplot(2,3,6)
imshow(medrgb,[]);
title([‘粒子群算法優化模擬退火算法彩色中值濾波’]);
% That’s it, GoodBye 😐
三、運行結果
四、matlab版本及參考文獻
1 matlab版本
2014a
2 參考文獻
[1] 張捍東,廖天紅,岑豫皖.用模擬退火思想的粒子群算法實現圖像分割[J].計算機技術與發展. 2010,20(05)
3 備注
簡介此部分摘自互聯網,僅供參考,若侵權,聯系刪除
總結
以上是生活随笔為你收集整理的【图像分割】基于matlab粒子群算法优化模拟退火算法图像分割【含Matlab源码 2020期】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络原理的思维导图汇总
- 下一篇: 网页自动填表html,韶关网页自动填表基