²é¿´: 1854  |  »Ø¸´: 5
µ±Ç°Ö÷ÌâÒѾ­´æµµ¡£
±¾Ìû²úÉú 1 ¸ö ·ÂÕæEPI £¬µã»÷ÕâÀï½øÐв鿴

·ÉÑï2282

ÈÙÓþ°æÖ÷ (ÖøÃûдÊÖ)

[½»Á÷] ¡¾ÇóÖú¡¿¼ÆËãN·ùͼÏñÖÐÔ²µÄÖÐÐĵã×ø±ê¡¾Òѽâ¾ö¡¿ ÒÑÓÐ2È˲ÎÓë

ÒÑÍê³É£¡£¡

[ Last edited by ·ÉÑï2282 on 2010-4-15 at 10:46 ]
»Ø¸´´ËÂ¥
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

anyuezhiji

Òø³æ (ÕýʽдÊÖ)

ÐÇ¿ÕÐÐÕß

¡ï ¡ï
·ÉÑï2282(½ð±Ò+20):ÎÒÒª¶ÁÈ¡µÄÊÇSPE¸ñʽµÄÎļþ£¬¶øÇÒÊÇN·ù£¬ÔÚÒ»¸öÎļþ¼ÐÀ²»ÖªÄãÓÐʲôºÃ°ì·¨£¬ÎÒÔÙ×·¼Ó½ð±Ò£¡ 2010-04-12 20:09
adu886886(½ð±Ò+2):ÐÁ¿àÁË 2010-04-13 08:26
ÏÂÃæµÄ´úÂëÓ¦¸Ã¿ÉÒÔ½â¾öÄãµÄÎÊÌâ
ÒýÓûØÌû:
function Find_Center_of_circles


%%Find Center of circles from picture
%%PSL@CSU
%%QQ:547423688
%%Email:anyuezhiji@qq.com
%%Edit @ 2010.4.12

%±ßÔµÌáÈ¡

I=imread('picture.TIF');
I=rgb2gray(I);
I=imadjust(I);
Image=I;
figure, imshow(I);

[m,n]=size(Image);
Model=zeros(m,n);
for i=1:m;
for j=1:n;
Model(i,j)=Image(i,j);
end
end


%¹Û²ìÄ¿±êµÄ»Ò¶È·¶Î§
%Èç¹ûimshow°×É«µÄµãÏÔʾµÄͼ²»ÊÇÒª²éÕÒµÄÁ½¸öÔ²µÄ±ßÔµ£¬µ÷ÕûModel<210
%L=bwlabel(mask)±ê¼Ç¶ÔÏó

mask=Model<210;
figure,imshow(mask);
L=bwlabel(mask);

%show³öÔ²µÄ±ßÔµ
for i=1:2
mask1=mask;
mask1(find(L~=i))=0;
BW = edge(uint8(mask1),'sobel');
figure,imshow(BW);
[r,c]=find(BW~=0);
eval(['edge',num2str(i),'=[r c];']);
end
save('edge.mat','edge1', 'edge2');

for i=1:2
eval(['edgei=edge',num2str(i),';']);      
edgei=pixels2Coordinates(edgei);
[r,center]=findcenter(edgei,3)
figure
hold on
plot(edgei(:,1),edgei(:,2),'.');
plot(center(1),center(2),'r.');
end

function out=pixels2Coordinates(Pixs)
%ÔÚÏñËØÍ¼Æ¬ÉϽ¨Á¢×ø±êϵ
%Lx,Ly ³¤¡¢¿í·½ÏòÏñËØ
%x0 y0 ×ø±êϵԭµã ÕâÀïȡͼÏñÖеã

Lx=1024;
Ly=768;
Tx=3.78;
Ty=3.78;
x0=(1+Lx)/2;
y0=(1+Ly)/2;
out=((Pixs(:,2)-y0))/Tx;
out=[out,(Ly-Pixs(:,1)-x0)/Ty];

function [R,C]=findcenter(edge,mode)
%mode1 Ïà¼ÓÈ¡Öеã
%mode2 ×îС¶þ³ËÄâºÏÔ²x^2+y^2+a(1)*x+a(2)*y+a(3)=0
%mode3 ÓÃÒÅ´«Ëã·¨£¬ÕÒµ½Ò»µãºÍÒ»¸ö°ë¾¶R£¬¸÷µãµ½ÕâµãµÄ¾àÀëÓëRÖ®²îµÄƽ·½ºÍ×îС

[m,n]= size(edge);
switch mode
    case 1
    C=sum(edge)/m;
    R=sum(sqrt((edge(:,1)-C(1)).^2+(edge(:,2)-C(2)).^2))/m;
    case 2
    A=[edge(:,1) edge(:,2) ones(m,1)];
    B=-[edge(:,1).*edge(:,1)+edge(:,2).*edge(:,2)];
    a=A\B;
    C=-.5*a([1 2])';
    R = sqrt((a(1)^2+a(2)^2)/4-a(3));   
    case 3
    save('edge_m','edge','m');
    %[x, fval, reason]=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)
    C=sum(edge)/m;
    R=sum(sqrt((edge(:,1)-C(1)).^2+(edge(:,2)-C(2)).^2))/m;
    options = gaoptimset('Generations',200,'InitialPopulation',[R,C],...
        'PopulationSize',50,'TolFun',1e-7,'TolCon',1e-7,'MutationFcn',@mutationadaptfeasible );
       %'PopulationSize',50,'TolFun',1e-7,'TolCon',1e-7,'Display','diagnose');
    [sol, fval, exitflag] = ga(@f,3,[],[],[],[],[0,min(edge)],[2*R,max(edge)],[],options);  
    R=sol(1);
    C=sol([2,3]);
    fval
end        

%ÊÊÓ¦¶Èº¯ÊýµÄmatlab´úÂë
function [eval]=f(sol)
load edge_m
R=sol(1);
C=sol([2,3]);
eval=sum((sqrt((edge(:,1)-C(1)).^2+(edge(:,2)-C(2)).^2)-R).^2)/m;

[ Last edited by anyuezhiji on 2010-4-12 at 21:42 ]
°µÔÂÏÂûÓÐÁôÏ·çµÄºÛ¼££¬µ«ËüÒѾ­¼ÅȻƮÊÅ¡£¡£By&amp;amp;lt;°µÔÂÖ®¼Å&amp;amp;gt;:tiger38:
2Â¥2010-04-12 18:17:40
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

anyuezhiji

Òø³æ (ÕýʽдÊÖ)

ÐÇ¿ÕÐÐÕß

¡ï ¡ï
adu886886(½ð±Ò+2):ÐÁ¿àÁË 2010-04-13 08:27
spe¸ñʽûÅöµ½¹ý
ÄÜ´æÎªJPG¸ñʽô

JPG¸ñʽÊÇûÎÊÌâµÄ

Îļþ¶àµÄ»°Ð´¸öÑ­»·¾Í¿ÉÒÔÁË
ÒýÓûØÌû:
%%PSL@CSU
%%QQ:547423688
%%Email:anyuezhiji@qq.com
%%Edit @ 2010.4.12


files = dir('*.jpg ')£»

k=length(files );

R=zeros(2*k,1);
C=zeros(2*k,2);

for i=1:k

I=imread([files(k).name]);

%¶ÁÈëͼƬ

%¿ªÊ¼Í¼Æ¬´¦Àí

[r,c]=Find_Center_of_Circle(I)
R([2*i-1 2*i])=r;
C([2*i-1 2*i], : )=c;

end

%ͼƬ´¦Àí´úÂë
ÒýÓûØÌû:
function [R,C]=Find_Center_of_Circle(I)

%%Find Center of circles from picture
%%PSL@CSU
%%QQ:547423688
%%Email:anyuezhiji@qq.com
%%Edit @ 2010.4.12


I=rgb2gray(I);
Image=I;
figure, imshow(I);

[py,px]=size(Image);
Model=zeros(py,px);
for i=1:py;
for j=1:px;
Model(i,j)=Image(i,j);
end
end


%¹Û²ìÄ¿±êµÄ»Ò¶È·¶Î§
%Èç¹ûimshow°×É«µÄµãÏÔʾµÄͼ²»ÊÇÒª²éÕÒµÄÁ½¸öÔ²µÄ±ßÔµ£¬µ÷ÕûModel<50
%L=bwlabel(mask)±ê¼Ç¶ÔÏó

mask=Model<50;
L=bwlabel(mask);

%show³öÔ²µÄ±ßÔµ
r=[];c=[];
for i=1:2
mask1=mask;
mask1(find(L~=i))=0;
BW = edge(uint8(mask1),'sobel');
[r,c]=find(BW~=0);
eval(['BW',num2str(i),'=BW;']);
eval(['edge',num2str(i),'=[r c];']);
end
Model=(BW1|BW2)*1;



for i=1:2
eval(['edgei=edge',num2str(i),';']);  
[r,center]=findcenter(edgei,2)
R=[R;r];
C=[C;center]
Model(round(center(1)),round(center(2)))=1;
end
figure,imshow(Model);



function [R,C]=findcenter(edge,mode)
%mode1 Ïà¼ÓÈ¡Öеã
%mode2 ×îС¶þ³ËÄâºÏÔ²x^2+y^2+a(1)*x+a(2)*y+a(3)=0
%mode3 ÓÃÒÅ´«Ëã·¨£¬ÕÒµ½Ò»µãºÍÒ»¸ö°ë¾¶R£¬¸÷µãµ½ÕâµãµÄ¾àÀëÓëRÖ®²îµÄƽ·½ºÍ×îС

[m,n]= size(edge);
switch mode
    case 1
    C=sum(edge)/m;
    R=sum(sqrt((edge(:,1)-C(1)).^2+(edge(:,2)-C(2)).^2))/m;
    case 2
    A=[edge(:,1) edge(:,2) ones(m,1)];
    B=-[edge(:,1).*edge(:,1)+edge(:,2).*edge(:,2)];
    a=A\B;
    C=-.5*a([1 2])';
    R = sqrt((a(1)^2+a(2)^2)/4-a(3));   
    case 3
    save('edge_m','edge','m');
    %[x, fval, reason]=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)
    C=sum(edge)/m;
    R=sum(sqrt((edge(:,1)-C(1)).^2+(edge(:,2)-C(2)).^2))/m;
    options = gaoptimset('Generations',200,'InitialPopulation',[R,C],...
        'PopulationSize',50,'TolFun',1e-7,'TolCon',1e-7,'MutationFcn',@mutationadaptfeasible );
    [sol, fval, exitflag] = ga(@f,3,[],[],[],[],[0,min(edge)],[2*R,max(edge)],[],options);  
    R=sol(1);
    C=sol([2,3]);
    fval
end        

%ÊÊÓ¦¶Èº¯ÊýµÄmatlab´úÂë
function [eval]=f(sol)
load edge_m
R=sol(1);
C=sol([2,3]);
eval=sum((sqrt((edge(:,1)-C(1)).^2+(edge(:,2)-C(2)).^2)-R).^2)/m;

¶ÁÈëµÄͼƬ


´¦ÀíºóÊä³öµÄÔ²±ßÔµºÍÔ²ÐÄ


[ Last edited by anyuezhiji on 2010-4-14 at 01:04 ]
°µÔÂÏÂûÓÐÁôÏ·çµÄºÛ¼££¬µ«ËüÒѾ­¼ÅȻƮÊÅ¡£¡£By&amp;amp;lt;°µÔÂÖ®¼Å&amp;amp;gt;:tiger38:
3Â¥2010-04-12 21:16:13
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

·ÉÑï2282

ÈÙÓþ°æÖ÷ (ÖøÃûдÊÖ)

up
4Â¥2010-04-13 15:21:41
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

anyuezhiji

Òø³æ (ÕýʽдÊÖ)

ÐÇ¿ÕÐÐÕß

¡ï ¡ï
·ÉÑï2282(½ð±Ò+100):лл°ïÖú£¬Ì«¸ÐлÄãÁË¡£ 2010-04-13 23:54
adu886886(½ð±Ò+2):·Ç³£¸Ðлָµ¼£¬»¶Ó­³£À´·ÂտģÄâ°å¿é 2010-04-14 08:11
ÒýÓûØÌû:
function Find_CirclesCenter

%%Find Center of circles from picture
%%PSL@CSU
%%QQ:547423688
%%Email:anyuezhiji@qq.com
%%Edit @ 2010.4.13


path='D:\Program Files\MATLAB71\work\CurrentWork\test\';
clear CResult;
n=0;
for i=1:720
filename=['6-',num2str(i),'.spe'];  
if exist([path,filename],'file')
   disp(['ÕýÔÚ´¦Àí',filename]);
   n=n+1;
   img=ReadSpe([path,filename]);
   mask=img<0.22;
   %figure;imshow(mask);
   CResult(n).fname=['6-',num2str(i)];
   CResult(n).R=[];
   CResult(n).C=[];
   [L,m]=bwlabel(mask);
   for i=1:m
   mask1=mask;
   mask1(find(L~=i))=0;
   BW = edge(uint8(mask1),'sobel');
   %figure,imshow(BW);
   [r,c]=find(BW~=0);
   %eval(['BW',num2str(i),'=BW;']);
   %eval(['edge',num2str(i),'=[r c];']);

   CircleEdge=[r,c];
   [r,center]=findcenter(CircleEdge,2);
   CResult(n).R=[CResult(n).R;round(r)];
   CResult(n).C=[CResult(n).C;round(center([2 1]))];
   end
   CResult(n).num=m;
   [tc,p]=sort(CResult(n).C(:,2));
   CResult(n).C=CResult(n).C(p,: );
end
end


maxcm=0;
fidout=fopen([path,'CResult.txt'],'w');   
for i=1:n
fprintf(fidout,'%-8s',CResult(i).fname);  
cc=CResult(i).C;
[cm,cn]=size(cc);
if cm>maxcm
maxcm=cm;
end
for j=1:cm
fprintf(fidout,'\t\tÔ²ÐÄ%d£º(%5d£¬%5d)',j,cc(j,1),cc(j,2));
end
fprintf(fidout,'\n');  
end
fprintf(fidout,'\n');  
fprintf(fidout,'\n');  

for j=1:maxcm
fprintf(fidout,'%%Ô²ÐÄ%d×ø±ê\n',j);      
fprintf(fidout,'x%d=[',j);  
for i=1:n
if j<=CResult(i).num
fprintf(fidout,'%5d',CResult(i).C(j,1));
else
fprintf(fidout,'  nan');   
end
end

fprintf(fidout,']'';\n');
fprintf(fidout,'y%d=[',j);  
for i=1:n
if j<=CResult(i).num
fprintf(fidout,'%5d',CResult(i).C(j,2));
else
fprintf(fidout,'  nan');   
end
end

fprintf(fidout,']'';\n');
end

fclose(fidout);

function [R,C]=findcenter(edge,mode)
%mode1 Ïà¼ÓÈ¡Öеã
%mode2 ×îС¶þ³ËÄâºÏÔ²x^2+y^2+a(1)*x+a(2)*y+a(3)=0
%mode3 ÓÃÒÅ´«Ëã·¨£¬ÕÒµ½Ò»µãºÍÒ»¸ö°ë¾¶R£¬¸÷µãµ½ÕâµãµÄ¾àÀëÓëRÖ®²îµÄƽ·½ºÍ×îС

[m,n]= size(edge);
switch mode
    case 1
    C=sum(edge)/m;
    R=sum(sqrt((edge(:,1)-C(1)).^2+(edge(:,2)-C(2)).^2))/m;
    case 2
    A=[edge(:,1) edge(:,2) ones(m,1)];
    B=-[edge(:,1).*edge(:,1)+edge(:,2).*edge(:,2)];
    a=A\B;
    C=-.5*a([1 2])';
    R = sqrt((a(1)^2+a(2)^2)/4-a(3));   
    case 3
    save('edge_m','edge','m');
    %[x, fval, reason]=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)
    C=sum(edge)/m;
    R=sum(sqrt((edge(:,1)-C(1)).^2+(edge(:,2)-C(2)).^2))/m;
    options = gaoptimset('Generations',200,'InitialPopulation',[R,C],...
        'PopulationSize',50,'TolFun',1e-7,'TolCon',1e-7,'MutationFcn',@mutationadaptfeasible );
    [sol, fval, exitflag] = ga(@f,3,[],[],[],[],[0,min(edge)],[2*R,max(edge)],[],options);  
    R=sol(1);
    C=sol([2,3]);
    fval
end        

%ÊÊÓ¦¶Èº¯ÊýµÄmatlab´úÂë
function [eval]=f(sol)
load edge_m
R=sol(1);
C=sol([2,3]);
eval=sum((sqrt((edge(:,1)-C(1)).^2+(edge(:,2)-C(2)).^2)-R).^2)/m;



%¶ÁÈ¡.speÎļþ
%¶ÁÈ¡.speÎļþ²¢ÏÔʾͼÏñÈçÏÂÃæÄÇÑùµ÷Óú¯Êý¼´¿É

%img=ReadSpe(filename)
%figure;imshow(img);

function [data,data_type] = ReadSpe(filename,startX,endX,startY,endY)
   fid=fopen(filename,'r','ieee-le');

   [header,count]=fread(fid,4100,'uint8');
   dataType=header(109);
   xdim=header(43) + header(44)*2^8;
   ydim=header(657) + header(658)*2^8;
   frames=header(1447) + header(1448)*2^8 +header(1449)*2^16 + header(1450)*2^24;

    if ~exist('startX','var')
          startX = 1;
    end
    if ~exist('endX','var')
          endX=xdim;
    end
    if ~exist('startY','var')
          startY=1;
    end
    if ~exist('endY','var')
          endY=ydim;
    end
   strDataType={'float32','int32','int16','uint16'};
   data_type=strDataType{dataType+1};
   if (dataType>3)
      fclose(fid);
      fprintf(strcat('Unknown WinSpec data type: ',num2str(dataType)));
      clear data;
      data=[];
      return;
   end;
   data=zeros([xdim,endY-startY+1,frames]);
   dataSize=max((dataType<2)+1)*2;
   for z=1:frames
         fseek(fid,4100+dataSize*(xdim*((startY-1)+ydim*(z-1))),'bof');
         [data(1:xdim,1: (endY-startY+1),z),count]=fread(fid,[xdim (endY-startY+1)],strcat(strDataType{dataType+1},'=>',strDataType{dataType+1}));
   end;
   data=permute(data,[2 1 3]);
   data=data(:,startX:endX,: );
   fclose(fid);

×Ô¶¯¶ÁÈ¡speÎļþ£¬´¦ÀíͼƬ£¬²¢¼ÆËã½á¹û

Êä³öÎļþÄÚÈÝÈçÏ£º
ÒýÓûØÌû:
6-60                    Ô²ÐÄ1£º(   66£¬  144)                Ô²ÐÄ2£º( 1887£¬ 1955)
6-120                   Ô²ÐÄ1£º(  627£¬  119)                Ô²ÐÄ2£º( 1405£¬ 1937)


%Ô²ÐÄ1×ø±ê
x1=[   66  627]';
y1=[  144  119]';
%Ô²ÐÄ2×ø±ê
x2=[ 1887 1405]';
y2=[ 1955 1937]';

[ Last edited by anyuezhiji on 2010-4-14 at 01:19 ]
°µÔÂÏÂûÓÐÁôÏ·çµÄºÛ¼££¬µ«ËüÒѾ­¼ÅȻƮÊÅ¡£¡£By&amp;amp;lt;°µÔÂÖ®¼Å&amp;amp;gt;:tiger38:
5Â¥2010-04-13 22:27:05
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

anyuezhiji

Òø³æ (ÕýʽдÊÖ)

ÐÇ¿ÕÐÐÕß

¡ï ¡ï ¡ï
Сľ³æ(½ð±Ò+0.5):¸ø¸öºì°ü£¬Ð»Ð»»ØÌû½»Á÷
adu886886(½ð±Ò+2, ·ÂÕæEPI+1):ллÈÏÕæÖ¸µ¼ 2010-04-15 08:27
×îÖÕÐ޸ĵijÌÐò ÉÔÓб仯 ±ÈÈçÂ˵ôÔÓµãµÄ¹¦ÄÜ

ÓÐÐËȤµÄ³æÓÑ»°¿ÉÒÔ°ÑËüºÍÇ°ÃæµÄ´úÂë±È½Ï
ÕÒÕÒÓÐʲô²»Í¬
CODE:
function Find_CirclesCenter

%%Find Center of circles from picture
%%PSL@CSU
%%QQ:547423688
%%Email:anyuezhiji@qq.com
%%Edit @ 2010.4.14

path='D:\Program Files\MATLAB71\work\CurrentWork\test\';
outfile='CResult.txt';
clear CResult;
n=0;
maxcm=0;
flag=1;
for i=1:720
fname=['8-',num2str(i)];
filename=[fname,'.spe'];  
if exist([path,filename],'file')
   disp(['ÕýÔÚ´¦Àí',filename]);
   n=n+1;
   [img,dtype]=ReadSpe([path,filename]);
       %figure;imshow(img);
       minp=min(min(img));
       mask=img<3*minp;
       mask = bwmorph(mask,'clean');
       mask = bwmorph(mask,'majority',inf);
   %figure;imshow(mask);
   CResult(n).fname=fname;
   CResult(n).R=[];
   CResult(n).C=[];
   [L,m]=bwlabel(mask);
   %m
   
   if flag
   for i=1:m
   mask1=mask;
   mask1(find(L~=i))=0;
   BW = edge(uint8(mask1),'sobel');
   %figure,imshow(BW);
   [r,c]=find(BW~=0);
   %eval(['BW',num2str(i),'=BW;']);
   %eval(['edge',num2str(i),'=[r c];']);
   CircleEdge=[r,c];
   [r,center]=findcenter(CircleEdge,2);
   CResult(n).R=[CResult(n).R;round(r)];
   CResult(n).C=[CResult(n).C;round(center([2 1]))];
   end
   if m>maxcm
   maxcm=m;
   end
   CResult(n).num=m;
   [tc,p]=sort(CResult(n).C(:,2));
   CResult(n).C=CResult(n).C(p,:);
   
   fidout=fopen([path,outfile],'a+');
   fprintf(fidout,'%-8s',CResult(n).fname);  
   cc=CResult(n).C;
   for j=1:m
   fprintf(fidout,'\t\tÔ²ÐÄ%d£º(%5d£¬%5d)',j,cc(j,1),cc(j,2));
   end
   fprintf(fidout,'\n');  
   fclose(fidout);
   end%end if flag
end
end

if flag
fidout=fopen([path,outfile],'a+');  
fprintf(fidout,'\n');  
fprintf(fidout,'\n');  
for j=1:maxcm
fprintf(fidout,'%%Ô²ÐÄ%d×ø±ê\n',j);      
fprintf(fidout,'x%d=[',j);  
for i=1:n
if j<=CResult(i).num
fprintf(fidout,'%5d',CResult(i).C(j,1));
else
fprintf(fidout,'  nan');   
end
end
fprintf(fidout,']'';\n');
fprintf(fidout,'y%d=[',j);  
for i=1:n
if j<=CResult(i).num
fprintf(fidout,'%5d',CResult(i).C(j,2));
else
fprintf(fidout,'  nan');   
end
end
fprintf(fidout,']'';\n');
end
fprintf(fidout,'\n');  
fprintf(fidout,'\n');  
fclose(fidout);
end%end if flag

function [R,C]=findcenter(edge,mode)
%mode1 Ïà¼ÓÈ¡Öеã
%mode2 ×îС¶þ³ËÄâºÏÔ²x^2+y^2+a(1)*x+a(2)*y+a(3)=0
%mode3 ÓÃÒÅ´«Ëã·¨£¬ÕÒµ½Ò»µãºÍÒ»¸ö°ë¾¶R£¬¸÷µãµ½ÕâµãµÄ¾àÀëÓëRÖ®²îµÄƽ·½ºÍ×îС
[m,n]= size(edge);
switch mode
    case 1
    C=sum(edge)/m;
    R=sum(sqrt((edge(:,1)-C(1)).^2+(edge(:,2)-C(2)).^2))/m;
    case 2
    A=[edge(:,1) edge(:,2) ones(m,1)];
    B=-[edge(:,1).*edge(:,1)+edge(:,2).*edge(:,2)];
    a=A\B;
    C=-.5*a([1 2])';
    R = sqrt((a(1)^2+a(2)^2)/4-a(3));   
    case 3
    save('edge_m','edge','m');
    %[x, fval, reason]=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)
    C=sum(edge)/m;
    R=sum(sqrt((edge(:,1)-C(1)).^2+(edge(:,2)-C(2)).^2))/m;
    options = gaoptimset('Generations',200,'InitialPopulation',[R,C],...
        'PopulationSize',50,'TolFun',1e-7,'TolCon',1e-7,'MutationFcn',@mutationadaptfeasible );
    [sol, fval, exitflag] = ga(@f,3,[],[],[],[],[0,min(edge)],[2*R,max(edge)],[],options);  
    R=sol(1);
    C=sol([2,3]);
    fval
end        

%ÊÊÓ¦¶Èº¯ÊýµÄmatlab´úÂë
function [eval]=f(sol)
load edge_m
R=sol(1);
C=sol([2,3]);
eval=sum((sqrt((edge(:,1)-C(1)).^2+(edge(:,2)-C(2)).^2)-R).^2)/m;

%¶ÁÈ¡.speÎļþ
function [data,data_type] = ReadSpe(filename,startX,endX,startY,endY)
   fid=fopen(filename,'r','ieee-le');

   [header,count]=fread(fid,4100,'uint8');
   dataType=header(109);
   xdim=header(43) + header(44)*2^8;
   ydim=header(657) + header(658)*2^8;
   frames=header(1447) + header(1448)*2^8 +header(1449)*2^16 + header(1450)

*2^24;

    if ~exist('startX','var')
          startX = 1;
    end
    if ~exist('endX','var')
          endX=xdim;
    end
    if ~exist('startY','var')
          startY=1;
    end
    if ~exist('endY','var')
          endY=ydim;
    end
   strDataType={'float32','int32','int16','uint16'};
   data_type=strDataType{dataType+1};
   if (dataType>3)
      fclose(fid);
      fprintf(strcat('Unknown WinSpec data type: ',num2str(dataType)));
      clear data;
      data=[];
      return;
   end;
   data=zeros([xdim,endY-startY+1,frames]);
   dataSize=max((dataType<2)+1)*2;
   for z=1:frames
         fseek(fid,4100+dataSize*(xdim*((startY-1)+ydim*(z-1))),'bof');
         [data(1:xdim,1:(endY-startY+1),z),count]=fread(fid,[xdim (endY-startY+1)],strcat(strDataType{dataType+1},'=>',strDataType{dataType+1}));
   end;
   data=permute(data,[2 1 3]);
   data=data(:,startX:endX,:);
   fclose(fid);

[ Last edited by anyuezhiji on 2010-4-14 at 21:07 ]
°µÔÂÏÂûÓÐÁôÏ·çµÄºÛ¼££¬µ«ËüÒѾ­¼ÅȻƮÊÅ¡£¡£By&amp;amp;lt;°µÔÂÖ®¼Å&amp;amp;gt;:tiger38:
6Â¥2010-04-14 21:03:47
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ ·ÉÑï2282 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[»ù½ðÉêÇë] 5¸ö%2F£¬·Ç¹Ì¶¨¶Î22¸ö×Öĸ +9 jaasxulu 2026-07-15 10/500 2026-07-19 18:58 by wowsunflower
[»ù½ðÉêÇë] Сľ³æÃ»ÂäÁË£¬³ýÁËÆíµ»Ìû×Ó£¬¼¸ºõ¿´²»µ½ÓмÛÖµµÄÌû×Ó +15 botar 2026-07-14 16/800 2026-07-19 18:23 by wowsunflower
[˶²©¼ÒÔ°] ÊÛT0PÒ»ÇøSCIÎÄÕ£¬ÎÒ:8O5.51.O.54,¿ÆÄ¿ÆëÈ«,¿É£«¼± +3 bjm2e4yior 2026-07-18 3/150 2026-07-19 16:43 by 0u3sh5hhfi
[ÂÛÎÄͶ¸å] ÊÛT0PÒ»ÇøSCIÎÄÕ£¬ÎÒ:8O5.51.O.54,¿ÆÄ¿ÆëÈ«,¿É£«¼± +3 ufgqpyvpi6 2026-07-18 6/300 2026-07-19 16:23 by 0u3sh5hhfi
[¿¼²©] ÊÛT0PÒ»ÇøSCIÎÄÕ£¬ÎÒ:8O5.51.O.54,¿ÆÄ¿ÆëÈ«,¿É£«¼± +3 ufgqpyvpi6 2026-07-18 4/200 2026-07-19 16:10 by 0u3sh5hhfi
[½Ìʦ֮¼Ò] ÊÛT0PÒ»ÇøSCIÎÄÕ£¬ÎÒ:8O5.51.O.54,¿ÆÄ¿ÆëÈ«,¿É£«¼± +3 ufgqpyvpi6 2026-07-18 6/300 2026-07-19 16:03 by 0u3sh5hhfi
[»ù½ðÉêÇë] ¹úÉç¿ÆÍ¨Ñ¶ÆÀÉó +5 DZˮ¹Ú¾ü123 2026-07-18 6/300 2026-07-19 12:28 by lfy8008
[»ù½ðÉêÇë] ÃæÉϵÄË®ºÜÉî +16 ²¼²¼ºÍÒ»¶þ 2026-07-18 21/1050 2026-07-19 10:07 by Vivilian
[»ù½ðÉêÇë] ÉúÃü¿ÚC13ÃæÉÏ»áÆÀʱ¼ä +7 luckinging 2026-07-14 11/550 2026-07-17 20:43 by ³æ²·1988
[»ù½ðÉêÇë] ÉúÃü¿ÚÃæÉÏ»áÆÀ½áÊøÁËÂð´ó¼ÒÓÐÖªµÀ½á¹ûÂð£¿ÏÖÔÚ»¹Ã»Óнá¹ûÕý³£²»£¿ +6 ±ÌË®00 2026-07-16 9/450 2026-07-17 15:21 by jaasxulu
[ÂÛÎÄͶ¸å] ͶӢÎÄÆÚ¿¯ÈçºÎ²éÖØ 10+5 ²»ÖªµÀȡʲôÃû× 2026-07-15 6/300 2026-07-17 09:07 by bobvan
[Óлú½»Á÷] ²®°·Éϼ׻ùÇóÖú 100+4 002tmumu 2026-07-14 7/350 2026-07-16 19:47 by 002tmumu
[ÂÛÎÄͶ¸å] ¿ç³ö°æÉçÉÌͶ¸å 20+5 ÄߺÃ520 2026-07-13 5/250 2026-07-16 17:24 by ÎÞÊÓ¾üÍÅ
[»ù½ðÉêÇë] ÉúÉúÃüѧ²¿»áÆÀ +4 wuke100666 2026-07-15 4/200 2026-07-16 00:12 by À²À²Ð¡ÄÝ×Ó
[»ù½ðÉêÇë] H¿Ú£¬ÃæÉÏ£¬Ê±¼ä´Á7ÔÂ7ÈÕ¡£ +3 plumage5 2026-07-15 3/150 2026-07-15 21:06 by 6543yes
[»ù½ðÉêÇë] »áÆÀ +5 ÎÞÃûÕßµÇɽ 2026-07-15 5/250 2026-07-15 18:15 by ¸Ü¾ÍÊÇÄã¶Ô
[»ù½ðÉêÇë] E¿Ú»áÆÀ +11 ²¼²¼ºÍÒ»¶þ 2026-07-13 13/650 2026-07-15 16:34 by Kittylucky
[ÂÛÎÄͶ¸å] ũҵ»úеѧ±¨Í¶¸åÖÜÆÚ +3 G0DLIN 2026-07-14 7/350 2026-07-15 09:26 by xs74101122
[»ù½ðÉêÇë] ¹ú×ÔÈ»ÃæÉÏD¿ÚÆíµ» +4 monkeynana 2026-07-14 4/200 2026-07-15 09:14 by °×Ë®Öó
[»ù½ðÉêÇë] ûÊÕµ½ÏûÏ¢£¬ÔÙ´ÎÅãÅÜ +3 Ìì¿ÕÐdz½fly 2026-07-14 3/150 2026-07-14 19:14 by 6543yes
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û