摘要:
模拟退火首先从某个初始候选解开始,当温度大于0时执行循环。在循环中,通过随机扰动产生一个新的解,然后求得新解和原解之间的能量差,如果差小于0,则采用新解作为当前解。如果差大于0,则采用一个当前温度与能量差成比例的概率来选择是否接受新解。温度越低,接受的概率越小,差值越大,同样接受概率越小。是否接受的概率用此公式计算:p=exp(-ΔE/T)。这里ΔE为新解与原解的差,T为当前的温度。由于温度随迭代次数逐渐降低,因此获得一个较差的解的概率较小。典型的模拟退火算法还使用了蒙特卡洛循环,在温度降低之前,通过多次迭代来找到当前温度下比较好的解。这里使用模拟退火解旅行商问题,因为这个问题本身是一个NP难 阅读全文
摘要:
还是这本书上的内容,不过我看演化计算这一章是倒着看的,这里练习的算法正好和书中介绍的顺序是相反的。演化策略是最古老的的演化算法之一,和上一篇DE算法类似,都是基于种群的随机演化产生最优解的算法。算法步骤如下:1.设定种群个体数和需要迭代的次数。2.选择父代中的个体按照公式z1=sqrt(-2*ln(u1))*sin(2*pi*u2)*m,z2=sqrt(-2*ln(u1))*cos(2*pi*u2)*m进行演化。这里u1,u2都是随机值,m是控制因子,演化次数越多m,m越小,父代通过与z1,z2相加得到后代。3.计算后代的适应性。4.选择后代中最优的适应性作为全局最优适应性。其实整个过程和DE 阅读全文
摘要:
这两天在看M.Tim Jones的《人工智能》,书中不只介绍原理,而且都有相应的c代码实现。虽然代码不完全,不过缺少的部分完全可以自己补完。差异演化和昨天实现的PSO很类似,都属于优化算法。算法步骤:1.设定种群个体个数和需要迭代的次数。当然也可以设定条件,然后判断是否停止迭代。2.定义交叉概率CR,个体有一定概率进行变异,如果变异则进行第3步,如果不变异则下一代个体和当前个体一样。3.在种群中随机选出三个互不相同的个体进行变异,变异公式如下(有博士论文总结了一大堆变异公式):Xi,g+1=Xr1,g+F(Xr2,g-Xr3,g)其中X是种群中个体特征向量,这里就是x和y坐标。g是种群的代数。 阅读全文
摘要:
算法没有和图像处理直接相关,不过对于图像分类中的模式识别相关算法,也许会用到这个优化算法。算法步骤:1.首先确定粒子个数与迭代次数。2.对每个粒子随机初始化位置与速度。3.采用如下公式更新每个粒子的位置与速度。Px=Px+Pv*t; %位置更新公式 Pv=Pv+(c1*rand*(Gx-Px))+(... 阅读全文
摘要:
Log Polar就是所谓的极坐标变换,通过变换能将笛卡尔坐标系中的图像映射到极坐标系中。确切的来说我这里不算是Log Polar,因为Log Polar是将图像从(x,y)映射到(log(r),theta),而我是将图像从(x,y)映射到(r,theta)。原理是一样的。变换公式是:x=r*cos(theta);y=r*sin(theta);其中r代表极径,theta代表极角。这些应该学过高中的都会的。下图能形象的表示变换:似乎有通过此变换求图像特征的算法,不过具体操作我也不清楚。我这里只是实现了变换的操作。原图如下:以图像中心作为极坐标原点进行极坐标变换:matlab代码如下:clear 阅读全文
摘要:
通过本篇和上一篇的结合,应该就能做出拉普拉斯图像融合了。这里用的方法很简单,就是用模板和两个图像相乘,然后对处理后的两个图像再相加就可以了。拉普拉斯融合就是对金字塔的每一层图像做这样的操作,然后再重构就行了。先看看这里的效果:原图apple原图orange:模板图像(实际处理时需要对模板进行模糊):融合后图像:matlab代码如下:clear all; close all; clc;apple=double(imread('apple.jpg'));orange=double(imread('orange.jpg'));[m n]=size(apple);mas 阅读全文
摘要:
过去研究过高斯金字塔,不过今天看来,当时似乎搞错了,金字塔上下层应该是采样的关系,而不是缩放的关系,而且不同层的sigma应该也有所不同。拉普拉斯金字塔在图像融合中有所应用,方法是首先对两个待融合图像求拉普拉斯残差金字塔,然后用模板对每一级残差图像进行融合得到融合后图像的残差金字塔,然后对这个金字塔进行重构就能得到最终的融合图像,图像各尺度细节得到保留。(注:融合时模板一般会先用高斯函数模糊一下)不过这里不实现融合,只实现拉普拉斯金字塔的建立。建立金字塔的方框图如下(摘自《数字图像处理(第二版)》):通过j-1级近似图像和j级残差图像就能恢复j级输入图像。近似滤波器就是拉普拉斯滤波模板。插入滤 阅读全文
摘要:
RANSAC在图像拼接中有所使用,有时候也在图像理解的相关算法中有所使用。算法简介如下(摘自《图像处理、分析与机器视觉(第3版)》):1.假设我们要将n个数据点X={x1,x1,...,xn}拟合为一个由至少m个点决定的模型(m<=n,对于直线,m=2)。(我这里实际是两个不同均值、协方差高斯分布产生的数据)2.设迭代计数k=1。3.从X中随机选取m个项并拟合一个模型。(我这里直线拟合,选了2个项)4.给定偏差ε,计算X中相对于模型的残差在偏差ε的个数,如果元素个数大于一个阈值t,根据一致点集重新拟合模型(可以利用最小二乘或其变种),算法终止。(我这里的偏差为1,阈值为数据个数的2/3) 阅读全文
摘要:
曾经想要实现过Bertalmio图像修复算法,无奈自身实力不够,耗费两天时间也没能实现。昨天博客上有人问到TV模型,这个模型我过去是没听说过的,于是就找来相关论文研究了一下,发现TV模型也可以用来修复图像,于是就有了想实现的想法。用到的偏微分方程技巧和各项异性扩散很像。先看看效果吧:原lena:随手截的噪声图:合成的需要修复的图:修复后的图(没有处理边界):对于从来没有接触过图像修复的我来说,效果真是惊艳了。下面介绍运算步骤:和各项异性扩散类似,整个算法也是基于迭代的,迭代公式如下:其中Io代表当前处理的像素,Ip代表邻域像素,p就可以取news四邻域。H定义如下:这里的lambda为自定义的 阅读全文
摘要:
HOG(Histogram of Oriented Gradient)方向梯度直方图,主要用来提取图像特征,最常用的是结合svm进行行人检测。算法流程图如下(这篇论文上的):下面我再结合自己的程序,表述一遍吧:1.对原图像gamma校正,img=sqrt(img);2.求图像竖直边缘,水平边缘,边缘强度,边缘斜率。3.将图像每16*16(取其他也可以)个像素分到一个cell中。对于256*256的lena来说,就分成了16*16个cell了。4.对于每个cell求其梯度方向直方图。通常取9(取其他也可以)个方向(特征),也就是每360/9=40度分到一个方向,方向大小按像素边缘强度加权。最后归 阅读全文