查看单个帖子
旧 2009-03-30, 17:27   #1
ananjj
初级会员
 
注册日期: 2009-03-30
年龄: 44
帖子: 3
声望力: 0
ananjj 正向着好的方向发展
默认 [求助]关于matlab的struct函数

我在做hough变换检测直线,在

function lines=houghlines(f,theta,rho,rr,cc,fillgap,minlength)
%HOUGHLINES Extract line segments based on the Hough transform.
% LINES=HOUGHLINES(F,THETA,RHO,RR,CC,FILLGAP,MINLENGTH)
% extracts line segments in the image F associated with particular
% bins in a Hough. Vectors RR and CC specify the rows and columns
% of the Hough transform bins to use in searching for line
% segments. If HOUGHLINES finds two line segments associated with
% the same Hough transform bin that are separated by less than
% FILLGAP pixels, HOUGHLINES merges them into a single line
% segment. FILLGAP defaults to 20 if omitted. Merged line
% segments less than MINLENGTH pixels long are discarded.
% MINLENGTH defaults to 40 if omitted.
%
% LINES is a structure array whose length equals the number of
% merged line segments found. Each element of the structure array
% has these fields:
%
% point1 End-point of the line segment; two-element vector
% point2 End-point of the line segment; two-element vector
% length Distance between point1 and point2
% theta Angle (in degrees) of the Hough transform bin
% rho Rho-axis position of the Hough transform bin
if nargin < 6
fillgap=20;
end
if nargin < 7
minlength=40;
end
numlines=0; lines=struct;
for k=1:length(rr)
rbin=rr(k);cbin=cc(k);
% Get all pixels associated with Hough transform cell.
[r,c]=houghpixels(f,theta,rho,rbin,cbin);
if isempty(r)
continue
end
% Rotate the pixels locations about(1,1) so that they lie
% approximately along a vertical line.
omega=(90-theta(cbin))*pi/180;
T=[cos(omega) sin(omega); -sin(omega) cos(omega)];
xy=[r-1 c-1]*T;
x=sort(xy(:,1));

% Find the gaps larger than the threshold.
diff_x=[diff(x);inf];
idx=[0;find(diff_x>fillgap)];
for p=1:length(idx)-1
x1=x(idx(p)+1); x2=x(idx(p+1));
linelength=x2-x1;
if linelength >=minlength
point1=[x1 rho(rbin)]; point2=[x2 rho(rbin)];
% Rotate the end_point location back to the original
% angle.
Tinv=inv(T);
point1=point1*Tinv; point2=point2*Tinv;
numlines=numlines+1;
lines(numlines).point1=point1+1;
lines(numlines).point2=point2+1;
lines(numlines).length=length+1;
lines(numlines).theta=theta(cbin);
lines(numlines).rho=rho(rbin);
end
end
end
中遇到一个问题,在matlab命令界面输入lines=houghlines(f,theta,rho,r,c)的时候
提示的是lines是一个1x1的没有fields的struct。我觉得应该是上面代码红色的那个句子
出了问题,但是我看了help以后还是不知道怎么修改,麻烦哪位帮帮我,急用啊!!
非常感谢!!!!!!!
ananjj 当前离线   回复时引用此帖