基于PSO算法的图像匹配技术精品文档完整版.docx
《基于PSO算法的图像匹配技术精品文档完整版.docx》由会员分享,可在线阅读,更多相关《基于PSO算法的图像匹配技术精品文档完整版.docx(14页珍藏版)》请在冰豆网上搜索。
基于PSO算法的图像匹配技术精品文档完整版
东北大学
研究生考试试卷
考试科目:
人工神经网络的模型与算法
课程编号:
阅卷人:
考试日期:
姓名:
学号:
注意事项
1.考前研究生将上述项目填写清楚
2.字迹要清楚,保持卷面清洁
3.交卷时请将本试卷和题签一起上交
东北大学研究生院
基于PSO算法的图像匹配技术
摘要:
图像匹配问题是图像处理中的一个经典问题,在计算机视觉、模式识别和医学图像处理等方面有着广泛的应用。
本文主要介绍了在基于灰度图像匹配算法基础上,以匹配相似性度量函数为判断标准,结合智能算法中的粒子群算法来实现图像准确而快速的匹配。
关键词:
图像匹配;相似性度量;粒子群算法;离散空间
1引言
数字图像配准是指将从同一场景拍摄的具有重叠区域的图像通过特征匹配方法,找出图像之间的对应关系。
目前,图像配准技术广泛应用于医学、生物、信息处理和其它领域,它已成为图像处理应用中不可或缺的技术。
图像匹配问题主要有两种对应的问题模型:
一是两幅(或者多幅)来自不同传感器、不同视角或不同时间的图像需找出对应关系,经过匹配步骤可得出两幅图像的差别所在,为下一步处理作基础;二是根据已知的图像模式在另一幅图像中搜索类似模板的目标。
图像匹配技术是数字图像处理领域的一项重要研究,已在计算机视觉、虚拟现实场景、航空航天遥感测量、医学影像分析、光学和雷达跟踪等领域有着重要的应用价值。
大体图像匹配的应用领域概括起来主要有以下几个方面:
1.计算机视觉和模式识别。
包括图像分割、物体识别、形状重建、运动跟踪和特征识别。
2.医学图像分析。
包括医学成像信息诊断,生物医学信号处理等。
3.遥感信息处理。
包括特定目标的定位和识别等。
随着科学技术的发展,图像匹配技术在近代信息处理领域中的应用范围越来越广泛,而图像数据量庞大这一显著特点,严重制约了图像匹配技术的实时应用。
图像匹配的准确性和实时性是现今在具体应用上存在的一对矛盾体,如何在保持匹配准确性的同时,提高其匹配速度是现阶段急需解决的问题,也是目前对匹配算法的研究重点。
在序列目标图像分析、跟踪、识别,工业实时检测等实际应用中,一般是根据已知的图像模式,然后在另一幅图像中搜索类似模板的目标。
2图像匹配说明
2.1图像匹配流程
图像匹配是一个多步骤过程,总的来说,大概可分为图像输入、图像预处理、匹配有用信息提取、图像匹配、输出结果等。
由于所采用的方法各异,不同的匹配算法之间步骤也会有很大不同,但它们的大致过程是相同的。
图像匹配流程图如图2.1所示:
图2.1图像匹配流程图
2.2基于灰度的图像匹配算法
国内外现阶段对图像匹配研究主要是以提高匹配的精度和速度为主,同时对匹配方法的通用性及鲁棒性也有一定要求。
图像匹配方法大致可分为两类:
第一类是基于灰度的图像匹配算法;第二类是基于特征的图像匹配算法。
本文主要讲述第一类基于灰度的图像匹配算法。
这类方法直接利用图像的灰度信息进行匹配,通过象素对之间某种相似性度量(如相关函数、协方差函数、差平方和、差绝对值和等)的全局最优化实现匹配,不需进行图像分割和图像特征提取,因而可以避免由这些预处理所造成的精度损失。
这类匹配方法需要解决的问题是:
匹配速度比较慢,对灰度信息变化、光照变化、噪声非常敏感,没有充分利用灰度统计特性,对每一点的灰度信息依赖较大,不适应于匹配对象存在旋转和缩放情况下的匹配问题。
本节这里主要利用了基于灰度的图像匹配算法中较为简单的MAD算法,并结合智能算法中的粒子群算法的寻优优势,从而实现了较为快速而准确的图像匹配。
MAD算法即平均绝对差算法,是Leese最早提出来的一种匹配算法。
原理如图2.2所示:
图2.2平均绝对差算法原理图
基于灰度的MAD算法匹配方法函数公式可定义为:
其中d(x,y)为相似性度量函数在偏移量为(x,y)时的匹配度量值。
由公式可以看出,当d(x,y)取值最小时认为(x,y)是最佳匹配位置。
3PSO算法图像匹配
3.1PSO算法简介
粒子群优化算法(PSO)是一种进化计算技术,1995年由Eberhart博士和kennedy博士提出,源于对鸟群捕食的行为研究。
该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。
粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解。
PSO算法从这种模型中得到启示并用于解决优化问题。
PSO算法中,每个粒子表示空间中的一个解。
所有的粒子都有一个由适应度函数决定的适应值(fitnessvalue),每个粒子还有一个速度决定他们飞翔的方向和距离。
然后粒子们就追随当前的最优粒子在解空间中搜索。
PSO算法初始化为一群随机粒子(随机解)。
然后通过迭代找到最优解。
在每一次迭代中,粒子通过跟踪两个"极值"来更新自己。
第一个就是粒子本身所找到的最优解,这个解叫做个体极值pbest。
另一个极值是整个种群目前找到的最优解,这个极值是全局极值gbest。
粒子群算法的速度和位置迭代公式为:
其中:
,
为每个粒子的速度和位置。
pbest[i],gbest[]如前所述。
rand()表示(0,1)之间的均匀随机数据。
,
为学习因子,w称为惯性权值,
和
为正常数,称为学习因子,它们的具体含义为:
1.惯性权值w
保持粒子原有飞行速度的系数,控制粒子飞行速度变化,通过w调节PSO算法的全局与局部寻优能力。
当w取值较大时,粒子飞行速度变化幅度较大,全局寻优能力强,局部寻优能力弱;反之当w取值较小时局部寻优能力强,全局寻优能力弱。
选择一个合适的w可以平衡全局和局部搜索能力,这样可以以最少的迭代次数找到最优解,这是因为开始较大的惯性权重可以遍历比较大的范围,后来小的权重有较好的局部搜索能力。
2.学习因子
和
代表了粒子向自身历史最优值和全局最优值推进的随机学习权值,
的大小标志着粒子的认知能力。
当
=0,粒子没有认知能力,只受“社会知识”影响,在粒子间相互影响下,有能力达到新的搜索空间,收敛速度比标准算法快,但碰到复杂问题比标准算法更容易陷入局部极值。
的大小标志着粒子的社会信息交换共享能力,当
=0时,没有社会信息共享,只有“自身认知”的能力。
由于粒子之间没有信息交互,等价于众多单个粒子的飞行,因而得到最优解的概率很小。
如果
=
=0,说明粒子以当前速度飞行,直到边界。
为了确定
和
对算法性能的影响,Kennedy对以下4种模型做了大量的计算:
(1)认知模型,
=0;
(2)社会模型,
=0;(3)完全模型,
=
;(4)无私模型,也是一种社会模型,唯一不同的是,无私模型中每一个粒子获取自身历史最优值时只考虑其他粒子的信息而不包括自己。
认知模型只考虑粒子自身的信息,而没有与社会信息的交流和共享,Kennedy计算后发现该模型收敛速度比较慢;社会模型只考虑社会因素,倾向于向社会学习,收敛速度比较快,但容易早熟。
同时,为了平衡群体因素和个体因素的影响,普遍认为
和
取值为2效果较好,不过在文献中也有其它的取值,但是一般
=
并且范围在0和4之间。
3.2PSO算法图像匹配流程
本文主要是用PSO算法实现快速图像匹配,主要是用基于灰度的MAD算法匹配方法函数作为适应度函数的判断标准,在数字图像二维离散空间快速寻优,找到适应度函数具有最优值所对应的位置,此位置就是匹配的结果,从而实现图像匹配。
由于PSO算法的智能性和快速收敛性,所以参数设置合理,就可以实现快速而准确的图像匹配。
匹配程序的流程图如图3.1所示。
图3.1PSO算法图像匹配的程序流程图
3.3PSO算法的参数设置
参数设置及粒子寻优过程设计说明:
若基准图的大小为M行N列,实时图的大小为S行J列,则粒子一维方向的位置范围为[1,M-S+1],二维方向的位置范围为[1,N-J+1]。
粒子位置和速度的多样化适于粒子在全局搜索解,尽可能地发挥算法的搜索能力,否则很可能漏掉最优解,而使算法找到次优解。
所以粒子群的初始化位置为[1:
M-S+1,1:
N-J+1]范围内的均匀分布的随机数据。
当粒子超出最大位置时,将粒子所在维度设置为最大位置。
粒子最大速度的选择通常凭经验给定,一般设置为粒子范围宽度的10%-20%,根据实际情况和多次试验的结果,所以粒子两个维度的最大速度均设置为10。
所以粒子群的初始化位置为[-10:
10,-10:
10]的均匀分布的随机数据。
学习因子
和
均设置为2。
大的惯性因子w可以使算法不易陷入局部最优,到算法后期,小的惯性因子可以使收敛速度加快,使收敛更加平稳,时变权重可以在某一个范围内变化,一般在迭代过程中按照某种规律递减。
在本文中,粒子惯性权重w最大值为1,最小值为0.4,迭代过程中粒子权重随着迭代次数线性递减。
4实验结果及展望
4.1实验结果
图像匹配结果如下:
输入的基准图像和实时图像为:
图4.1输入的基准图像
图4.2输入的实时图像
程序运行输出的结果为:
图4.3输出的PSO寻优匹配结果
本文对该算法的匹配率进行了试验:
共进行了30次试验,成功匹配29次,匹配成功率96.67%,达到了较好的匹配准确率。
本文也对本算法和全遍历法在模板匹配次数和时间效率上进行了试验测试。
结果如表1所示。
表1本算法和全遍历算法比较
算法
全遍历法
PSO算法
运行时间
0.62s
0.51s
模板匹配次数
121*121=14641
60*120=7200
实验中发现群体数目不易过大或过小。
过大,PSO算法的优化性能得不到体现;过小,有可能会出现所求得的最优解的精度达不到要求。
迭代次数亦是如此,次数过多会加大运算量,降低算法的效率,过少,可能会导致最终解的精度不够。
在上述实验图像和环境下,经过多次实验后,发现群体数在60左右,迭代次数在120次左右时,能得到较满意的结果。
理论上讲,图像匹配问题按上述实验图像的情况,其计算量为(M-S+1)×(N-J+1)=14641次模板匹配计算,而PSO算法则只需要(群体数目×迭代次数)次模板匹配计算,在实验中群体数为60,迭代次数为120,所以模板匹配计算的次数为7200次。
同时时间效率上也要优于全遍历法,而且这种优势在需要遍历位置更多时,会表现得更加明显。
4.2展望
为更加减少计算量,提高算法的效率,本算法有如下改进方向。
1.进一步优化参数,在保证匹配率的前提下,降低粒子数和迭代次数。
2.优化PSO算法,例如引入收缩因子,并将速度的限制放宽、将学习因子
、
采取自适应时变调整策略。
3.粒子群算法与其它智能算法的融合。
在基本PSO算法中加入禁忌(Tabu)算法,将基本PSO和遗传算法相结合,进一步提出杂交PSO。
5参考文献
[1]纪震,廖惠连,吴青华.粒子群算法及应用[M],科学出版社,2009.01
[2]江铭炎,袁东风.人工鱼群算法及其应用[M],科学出版社,2012.01
[3]刘锦峰.图像模板匹配快速算法研究[D].中南大学.硕士学位论文.2007.05
[4]何志明.群体智能算法在图像匹配中的应用[D].陕西师范大学.硕士学位论文.2010.05
[5]李小林.混合粒子群优化算法及其在图像匹配中的应用研究[D]。
西安电子科技大学.硕士学位论文.2010.6
[6]鹿艳晶,马苗.基于灰色粒子群优化的快速图像匹配算法[J].计算机工程与应用.2009.45(10).
[7]王维真,熊义军,魏开平,何文雅.基于粒子群算法的灰度相关图像匹配技术.2010.46.(12).
附录
在此附上pso算法的源码,遍历法以及截取实时图像的源码详见程序文件夹。
%------本程序目的是用pso算法来对图像进行匹配-----------------------
tic
%------------------界面变量清理---------------------------------
closeall
clear
clc
%-----------读取图片信息-----------------------------
f=imread('lena_basic.jpg');
[row1,colu1]=size(f);
t=imread('lena_time.jpg');
[row2,colu2]=size(t);
%------------------参数设置--------------------------------------------
w_max=1;%惯性权重最大值
w_min=0.4;%惯性权重最小值
p_num=60;%粒子规模数量
p_dim=2;%粒子维数
c1=2;c2=2;%学习因子
v_max=10;%速度上限
v_min=-10;%速度下限
p_iter=120;%迭代最大次数次数设定
p_position_min=1;
p_position_max=row1-row2+1;
%------------------初始化,位置和速度------------------------------------
p_position=zeros(p_num,p_dim);%先设定一个空的矩阵,来放置粒子当前位置信息,注意行和列的设定
p_speed=zeros(p_num,p_dim);%先设定一个空的矩阵,来放置粒子当前速度信息,注意行和列的设定
fork_ini=1:
p_num%范围最大值为粒子的个数
p_position(k_ini,:
)=round(p_position_min+...
(p_position_max-p_position_min)*rand(1,p_dim));%初始化位置,位于p_position_min到p_position_max之间的随机均匀分布的数据
p_speed(k_ini,:
)=round(-10+20*rand(1,p_dim));%初始化速度,位于-10到10之间的随机均匀分布的数据
end
%----------------------计算初始化粒子的最优值数据-------------------------
p_local_position=p_position;%初始化后,各个粒子当前初始化的位置为各自记忆最优位置
%p_local_position中为各个粒子的历史记忆最优位置
p_local_value=zeros(1,p_num);%各个粒子的记忆最优位置的最优值
fork1=1:
p_num%寻找初始化后,当前全局最优粒子(本例是求最大值)
%p_local_value(k1)=compute_fit(p_position(k1,:
),p_dim);%计算各个粒子当前的适应度函数值
temp=p_position(k1,:
);
f_temp1=f(temp
(1):
temp
(1)+row2-1,temp
(2):
temp
(2)+colu2-1);
f_temp2=abs(f_temp1-t);
p_local_value(k1)=sum(sum(f_temp2))/(row2*colu2);
%p_local_value(k1)计算各个粒子当前的适应度函数值
%p_local_value为保存各个粒子适应度函数数据
end
p_global_value=p_local_value
(1);%先假定第一个粒子拥有当前初始化全局最优值
p_global_position=p_position(1,:
);%即假定第一个粒子为当前初始化全局最优粒子位置
fork2=1:
p_num%寻找初始化后,当前全局最优粒子
ifp_global_value>=p_local_value(k2)%*********判断条件********
p_global_value=p_local_value(k2);%更新全局最优值信息
p_global_position=p_position(k2,:
);%更新全局最优粒子位置信息
end
end
%----------------------------中心主程序-----------------------------------------
%---------更新粒子位置和速度,通过判断条件,找出全局最优值-------------------------
%whileexpression
%statements
%end
flag_stop=0;%迭代结束的标志
k_iter=0;%迭代的次数初始化
whileflag_stop==0%判断迭代标志,是否循环
%------------更新速度和位置信息-------------------------
w=w_max-0.6*k_iter/p_iter;%更新惯性权重值
%tic
forkd=1:
p_dim
forkn=1:
p_num
p_speed(kn,kd)=round(w.*p_speed(kn,kd)+...%粒子自身速度
(c1*rand
(1)).*(p_local_position(kn,kd)-p_position(kn,kd))+...%粒子的自身学习
(c2*rand
(1)).*(p_global_position(kd)-p_position(kn,kd)));%粒子的社会全局学习
ifp_speed(kn,kd)>v_max%最大速度制约
p_speed(kn,kd)=v_max;
end
ifp_speed(kn,kd)p_speed(kn,kd)=v_min;
end
p_position(kn,kd)=round(p_position(kn,kd)+p_speed(kn,kd));%更新粒子的位置
ifp_position(kn,kd)p_position(kn,kd)=p_position_min;
end
ifp_position(kn,kd)>p_position_max%最大位置制约
p_position(kn,kd)=p_position_max;
end
end
end
%---------适应函数值的比较,来记录记忆个体最优,和找到全局最优---------------------------
%---------来记录记忆个体最优---------------------------
%tic
forkn=1:
p_num
temp=p_position(kn,:
);
f_temp1=f(temp
(1):
temp
(1)+row2-1,temp
(2):
temp
(2)+colu2-1);
f_temp2=abs(f_temp1-t);
p_fit_new(kn)=sum(sum(f_temp2))/(row2*colu2);
%p_fit_new(kn)计算当前位置的适应度函数值
ifp_fit_new(kn)<=p_local_value(kn)
p_local_value(kn)=p_fit_new(kn);%更新个体记忆最优值
p_local_position(kn,:
)=p_position(kn,:
);%更新个体记忆最优位置
end
end
%---------找到全局最优(通过上面找到的个体最优)---------------------------
%tic
p_global_value=p_local_value
(1);%先假定第一个粒子拥有目前全局最优值
forkn=1:
p_num%寻找当前全局最优粒子
ifp_global_value>=p_local_value(kn)
p_global_value=p_local_value(kn);%更新全局最优值信息
p_global_position=p_position(kn,:
);%更新全局最优粒子位置信息
end
end
%t3=toc
%----------是否改变迭代标志的判断------------------------
ifk_iter>=p_iter%判断迭代次数是否达到要求
flag_stop=1;
end
k_iter=k_iter+1;%更新迭代次数数据信息
end
%-------------------------输出最优值的信息--------------------------------
disp('*************************************************************')
disp('函数的全局最优位置坐标为:
')
p_global_position
imshow(f),title('原始基准图像');
figure,imshow(t),title('实时图像');
figure,imshow(f),title('PSO寻找匹配结果')
holdon
rectangle('Position',[p_global_position
(1),p_global_position
(2),row2,colu2],'edgecolor','w','LineWidth',2)
holdoff
toc%显示程序总用时间
disp('*************************************************************')