www.pudn.com > houghplotline.rar > hough.m, change:2006-10-25,size:2258b


function hough(x) 
% 该函数实现hough变换提取直线的功能 
% 输入图像x,运行之后直接画出直线。 
% N=5 
[m,n]=size(x); 
% 求出图像大小 
md=round(sqrt(m^2+n^2)); 
% 确定网格的最大区域 
ma=180; 
ruthta=zeros(md,ma); 
% 产生技术矩阵 
ruthx=cell(2,2);
% cell数组相当于c语言中的指针,可动态改变大小 
for i=1:md 
    for j=1:ma 
        ruthx{i,j}=[]; 
    end 
end 
% 产生空网格 
for i=5:m-4 
    for j=5:n-4 
        if x(i,j)==1 
            for k=1:ma 
                ru=round(abs(j*cos(k*pi/180)+i*sin(k*pi/180))); 
%                 根据直线的法线式表示,计算出 平面上不同点的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) 
x=ones(size(x)); 
% imshow(x); 
N=1; 
% 这里假设图像上有一条主要的直线 
for i=1:N 
%  这里假定图像上有N条主要的直线    
    [y1,coll]=max(ruthta); 
    [y2,row]=max(y1); 
%   求出hough变换值最大值的坐标   
    col=coll(row); 
    ruthta(col,row)=0; 
%     为避免重复计算,将计算过的点置位0 
    M=3; 
    if col-M>0&col+M0&row+M