MATLAB程序大全 - 图文 联系客服

发布时间 : 星期五 文章MATLAB程序大全 - 图文更新完毕开始阅读ee93ef4b03d276a20029bd64783e0912a3167c3b

☆★☆★☆

for k=1:10

plot3(par_best.x+100,par_best.y+100,par_best.fit,'g*'); %画出最佳粒子的位置,+100为相对偏移 for p=1:n

[par(p) par_best]=update_par(par(p),par_best); %更新每个粒子信息 end end

update.par.m

function [par par_best]=update_par(par,par_best)

%Px=Px+Pv*t,这里t=1,Px为当前粒子的位置,Pv为当前粒子的速度 par.x=par.x+par.vx; par.y=par.x+par.vy;

par.fit=compute_fit(par); %计算当前粒子适应度

%Pv=Pv+(c1*rand*(Gx-Px))+(c2*rand*(PBx-Px)) %这里c1,c2为加速因子

%Gx为具有最佳适应度粒子的位置 %PBx为当前粒子的最佳位置 c1=1; c2=1;

par.vx=par.vx+c1*rand()*(par_best.x-par.x)+c2*rand()*(par.bestx-par.x); par.vy=par.vy+c1*rand()*(par_best.y-par.y)+c2*rand()*(par.besty-par.y);

if par.fit>par.bestfit %如果当前粒子适应度要好于当前粒子最佳适应度

par.bestfit=par.fit; %则更新当前粒子最佳适应度 par.bestx=par.x; %更新当前粒子最佳位置 par.besty=par.y;

if par.bestfit>par_best.fit %如果当前粒子最佳适应度好于最佳粒子适应度

par_best.fit=par.bestfit; %则更新最佳粒子适应度 par_best.x=par.x; %更新最佳粒子位置 par_best.y=par.y; end end end

compute_fit.m

☆★☆★☆

function re=compute_fit(par) x=par.x; y=par.y; sigma=50;

if x<-100 || x>100 || y<-100 || y>100

re=0; %超出范围适应度为0

else %否则适应度按目标函数求解

re= (1/(2*pi*sigma^2))*exp(-(x.^2+y.^2)/(2*sigma^2)); end end

16.

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 all; close all; clc;

img=double(imread('lena.jpg')); imshow(img,[]); [m n]=size(img);

[ox oy]=ginput(); %获得极坐标变换的原点 oy=round(oy); ox=round(ox);

%求中心点到图像四个角的距离 up_left=sqrt((oy-0)^2+(ox-0)^2); up_right=sqrt((oy-0)^2+(ox-n)^2); down_left=sqrt((oy-m)^2+(ox-0)^2); down_right=sqrt((oy-m)^2+(ox-n)^2);

%求中心点距离四角距离的最大值,作为变换后图像的高。

☆★☆★☆

%这个最大值也是极坐标变换的极径

radius=round(max([up_left up_right down_left down_right])); angle=360; %变换后图像的宽 imgn=zeros(radius,angle);

for i=1:radius %纵坐标代表极径,不同情况不一样 for j=1:angle %横坐标代表极角,恒为360

%oy,ox作为极坐标变换中心坐标,需要作为偏移量相加 h=oy+round(i*sin(j*pi/180)); w=ox+round(i*cos(j*pi/180));

if h>0 && w> 0&& h<=m && w<=n %超出原图像的像素忽略 imgn(i,j)=img(h,w); %最邻近插值,因为前面求h,w用了round();

end end end

figure;

imshow(imgn,[]);

17.

通过本篇和上一篇的结合,应该就能做出拉普拉斯图像融合了。

这里用的方法很简单,就是用模板和两个图像相乘,然后对处理后的两个图像再相加就可以了。 拉普拉斯融合就是对金字塔的每一层图像做这样的操作,然后再重构就行了。 先看看这里的效果: 原图apple