www.pudn.com > hough.rar > hough.m
%hough transform
function hough(x)
[m,n]=size(x); %求图像大小
bw=edge(x,'sobel') %用sobel算子进行边缘提取
md=round(sqrt(m^2+n^2)); %确定网格的最大区域;sqrt为求平方根,round为向最近整数圆整
ma=180;
ruthta=zeros(md,ma);
ruthx=cell(1,1); %原胞数组,可以动态改变大小
for i=1:md
for j=1:ma
ruthx{i,j}=[];
end
end
%产生空网格
for i=5:m-4
for j=5:n-4
if bw(i,j)==1
for k=1:ma
ru=round(abs(j*cos(x(k))+i*sin(x(k)))); %根据直线的法线式表示,计算出平面上不同点的hough变换值
ruthta(ru+1,k)=ruthta(ru+1,k)+1; %将hough变换值相应的位置的计数值加1
ruthx{ru+1,k}=[ruthx{ru+1,k},[i,j]']; %记录hough变换值的位置对应的点坐标
end
end
end
end
figure(1)
bw=ones(size(bw));
imshow(bw);
N=1;
for i=1:N
[y1,coll]=max(ruthta);
[y2,row]=max(y1); %求出hough变换值最大值的坐标
col=coll(row);
ruthta(col,row)=0;
N=3;
if col-N>0 & col+N0 & row-N