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