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