clc;clear;
f=imread('zhuixing3.jpg');
fedge=im2bw(rgb2gray(f));
whos f;
[row,col]=size(fedge);
minofa=10;
maxofa=round(row/2);
minofy0=round(col/2)-30;
maxofy0=round(col/2)+30;
minofb=20;
maxofb=round(col/2);
minofx=round(row/2)-30;
maxofx=round(row/2)+30;
scalor=4;
%四维零矩阵,double 型
H=zeros(floor((maxofx-minofx)/scalor)+1,floor((maxofa-minofa)/scalor)+1,
...
floor((maxofy0-minofy0)/scalor)+1,floor((maxofb-minofb)/scalor)+1);
for x=1:row
for y=1:col
if temp==1
temp=fedge(x,y);%将(x,y)处的灰度值付给 temp
for a=minofa:scalor:maxofa
for x0=minofx:scalor:maxofx
for b=minofb:scalor:maxofb
for y0=minofy0:scalor:maxofy0
temp=((y-y0)/b)^2+((x-x0)/a)^2;
if abs(temp-1)<=0.01
xtemp=floor((x0-minofx)/scalor)+1;
atemp=floor((a-minofa)/scalor)+1;
ytemp=floor((y0-minofy0)/scalor)+1;
btemp=floor((b-minofb)/scalor)+1;
H(xtemp,atemp,ytemp,btemp)=H(xtemp,atemp,ytemp,btemp)+1;%只有其中一个坐标
数最大
end
end
end
end
end
end
end
end
maxofH=max(max(max(max(H))));%求出这个最大数
for i=1:floor((maxofx-minofx)/scalor)+1
for j=1:floor((maxofa-minofa)/scalor)+1
for m=1:floor((maxofy0-minofy0)/scalor)+1
for n=1:floor((maxofb-minofb)/scalor)+1
temp=H(i,j,m,n);
if temp==maxofH
xtemp=i;
atemp=j;
ytemp=m;
btemp=n;
break;
end
end
end
end
end
x0=(xtemp-1)*scalor+minofx;
a=(atemp-1)*scalor+minofa;
y0=(ytemp-1)*scalor+minofy0;
b=(btemp-1)*scalor+minofb;
fprintf(1,'abxy %d %d %d %d\n',a,b,x0,y0);
imshow(fedge,[]);
hold on;
plot(y0,x0,'r+');
t=0:pi/180:2*pi;
plot(y0+b*sin(t),x0+a*cos(t),'r-');
hold off;