|
hough变换检测椭圆的MATLAB程序
- [row col]=size(fedge);
- minofa=a;
- maxofa=round(row/2);
- minofy0=round(col/2)-30;
- maxofy0=round(col/2)+30;
- minofb=round(col/2)-60;
- maxofb=round(col/2);
- maxofx=round(row/2);
- scalor=4;
- H=zeros(floor((maxofa-minofa)/scalor)+1,floor((maxofa-minofa)/scalor)+1,...
- floor((maxofy0-minofy0)/scalor)+1,floor((maxofb-minofb)/scalor)+1);
- for x=1:maxofx
- for y=1:col
- temp=fedge(x,y);
- if temp==255
- for a=minofa:scalor:maxofa
- for x0=a:scalor:maxofa
- 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-minofa)/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((maxofa-minofa)/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+minofa;
- a=(atemp-1)*scalor+minofa;
- y0=(ytemp-1)*scalor+minofy0;
- b=(btemp-1)*scalor+minofb;
- figure;
- 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;
复制代码
看看这个好不好使 |
|