logo资料库

hough变换法检测椭圆matlab.doc

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
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;
分享到:
收藏