唐 山 学 院 毕 业 设 计
for j=1:height; coordinate_y(i,j)=j; end end
[w z]=tforminv(tform,coordinate_x,coordinate_y); for i=1:width for j=1:height source_x=w(i,j); source_y=z(i,j);
if(source_x>width-1||source_y>height-1||double(uint16(source_x))<=1||double(uint16(source_y))<=1)
hab(a(1,1),a(1,1))=hab(a(1,1))+1; else
m=fix(source_x); n=fix(source_y); index_b=b(i,j); index_a0=a(m,n); index_a1=a(m+1,n); index_a2=a(m,n+1); index_a3=a(m+1,n+1) dx=source_x-m; dy=source_y-n;
hab(index_a0,index_b)=hab(index_a0,index_b)+(1-dx)*(1-dy); hab(index_a1,index_b)=hab(index_a1,index_b)+dx*(1-dy); hab(index_a2,index_b)=hab(index_a2,index_b)+(1-dx)*dy; hab(index_a3,index_b)=hab(index_a3,index_b)+dx*dy; end end end
habsum=sum(sum(hab)); index=find(hab~=0); pab=hab/habsum;
hab=sum(sum(-pab(index).*log2(pab(index))));
31
唐 山 学 院 毕 业 设 计
pa=sum(pab'); index=find(pa~=0);
ha=sum(sum(-pa(index).*log2(pa(index)))); pb=sum(pab); index=find(pb~=0);
hb=sum(sum(-pb(index).*log2(pb(index)))); mi=ha+hb-hab;
%一维搜索
function [Y,fY,step]=oneDimSearch(R,F,X,direction,len,handles) for i=-len:len
step_b=X+direction*i;
% mi(i+len+1)=Huxinxi(R,F,step_b(1),step_b(2),step_b(3) ); mi(i+len+1)=myMI(step_b(2),step_b(1),-step_b(3),handles ); % x=step_b(2),y=step_b(1),ang=-step_b(3) end
[oneDim_max,position]=max(mi); step=position-len-1; Y=X+direction*step;
fY=oneDim_max; %Powell
function [OUT]=POWELL(handles) F= handles.I;
R= handles.J; % reference image len=10; D=[1 0 0; 0 1 0; 0 0 1]; X0=[0 0 0]; d3=D(3,:);
[Z,fZ,step]=oneDimSearch(R,F,X0,d3,len,handles); d1=D(1,:);
[X1,fX1,step]=oneDimSearch(R,F,Z,d1,len,handles);
32
唐 山 学 院 毕 业 设 计
d2=D(2,:);
[X2,fX2,step]=oneDimSearch(R,F,X1,d2,len,handles); d3=D(3,:);
[X3,fX3,step]=oneDimSearch(R,F,X2,d3,len,handles); Cha=[fZ-fX1 fX1-fX2 fX2-fX3]; [maxCha,j0]=max(Cha); e=9;
FANSHU=X3-X0;
Y=sum( FANSHU.*FANSHU ); aaa=0; while( Y>e ) aaa=aaa+1; d=X3-Z;
[Z1,fZ1,landa]=oneDimSearch(R,F,X3,d,len,handles); temp=sqrt( (fX3-fZ1)/maxCha ); if( abs(landa) <= temp ) X0=Z1; else D(4,:)=d; for i=j0:3
D(i,:)=D(i+1,:); end X0=Z1; end
d3=D(3,:);
[Z,fZ,step]=oneDimSearch(R,F,X0,d3,len,handles); d1=D(1,:);
[X1,fX1,step]=oneDimSearch(R,F,Z,d1,len,handles); d2=D(2,:);
[X2,fX2,step]=oneDimSearch(R,F,X1,d2,len,handles); d3=D(3,:);
[X3,fX3,step]=oneDimSearch(R,F,X2,d3,len,handles); Cha=[fZ-fX1 fX1-fX2 fX2-fX3]; [maxCha,j0]=max(Cha);
33
唐 山 学 院 毕 业 设 计
FANSHU=X3-X0;
Y=sum( FANSHU.*FANSHU ); end
OUT(1)=X3(2); OUT(2)=X3(1); OUT(3)=-X3(3); OUT(4)=fX3;
function [OUT,varargout]=PSO(structure) D=3;
rand('state',sum(100*clock)); if nargin < 1
error('Not enough arguments.'); end
% PSO算法
VRmin=ones(D,1)*-20; VRmax=ones(D,1)*20; VR=[VRmin,VRmax]; minmax = 1;
P =[1 2000 20 4 2 2 0.9 0.2 1500 2 1e-5 20 1]; df=P(1); me=P(2); ps=P(3); mv=P(4); ac1=P(5); ac2=P(6); iw1 = P(7); iw2 = P(8); iwe = P(9); flagg=P(10); ergrd=P(11); ergrdep=P(12); plotflg=P(13); % PLOTTING
34
唐 山 学 院 毕 业 设 计
message = sprintf('PSO: %%g/%g iterations, GBest = %%g.\\n',me); pos=40*rand(ps,D)-20; vel=8*rand(ps,D)-4; % initial pbest positions vals pbest=pos;
for j=1:ps % start particle loop numin='0'; for i=1:D
numin=strcat(numin,',',num2str(pos(j,i))); end
%evstrg=strcat('feval(''',functname,'''',numin(2:end),',structure',')'); evstrg=strcat('feval(''myMI''',numin(2:end),',structure',')');
out(j)=eval(evstrg); % evaluate desired function with particle j end
pbestval=out; % initially, pbest is same as pos % assign initial gbest here also (gbest and gbestval) if minmax==1
[gbestval,idx1]=max(pbestval); % this picks gbestval when we want to maximize the function elseif minmax==0
[gbestval,idx1]=min(pbestval); % this works for straight minimization end
gbest=pbest(idx1,:); % this is gbest position tr(1)=gbestval; % save for output % start PSO iterative procedures
cnt=0; % counter used for updating display according to df in the options cnt2=0; % counter used for the stopping subroutine based on error convergence for i=1:me % start epoch loop (iterations)
if flagg==0 % randimization control, one random set for each epoch rannum1=rand(1); rannum2=rand(2); end
for j=1:ps % start particle loop
if flagg==1 % randomization control, one random set for each particle at each
35