Help Classic List Threaded 3 messages Open this post in threaded view
|

Help

 Hi, I have copied and assimilated the houghpeaks function into octave.The function:function [r, c, hnew] = houghpeaks(h, numpeaks, threshold, nhood)%HOUGHPEAKS Detect peaks in Hough transform.%   [R, C, HNEW] = HOUGHPEAKS(H, NUMPEAKS, THRESHOLD, NHOOD) detects%   peaks in the Hough transform matrix H.  NUMPEAKS specifies the%   maximum number of peak locations to look for.  Values of H below%   THRESHOLD will not be considered to be peaks.  NHOOD is a%   two-element vector specifying the size of the suppression%   neighborhood.  This is the neighborhood around each peak that is%   set to zero after the peak is identified.  The elements of NHOOD%   must be positive, odd integers.  R and C are the row and column%   coordinates of the identified peaks.  HNEW is the Hough transform%   with peak neighborhood suppressed. %%   If NHOOD is omitted, it defaults to the smallest odd values >=%   size(H)/50.  If THRESHOLD is omitted, it defaults to%   0.5*max(H(:)).  If NUMPEAKS is omitted, it defaults to 1.  %   Copyright 2002-2004 R. C. Gonzalez, R. E. Woods, & S. L. Eddins%   Digital Image Processing Using MATLAB, Prentice-Hall, 2004%   \$Revision: 1.5 \$  \$Date: 2003/11/21 13:34:50 \$ if nargin < 4   nhood = size(h)/50;   % Make sure the neighborhood size is odd.   nhood = max(2*ceil(nhood/2) + 1, 1);endif nargin < 3   threshold = 0.5 * max(h(:));endif nargin < 2   numpeaks = 1;end done = false;hnew = h; r = []; c = [];while ~done   [p, q] = find(hnew == max(hnew(:)));   p = p(1); q = q(1);   if hnew(p, q) >= threshold      r(end + 1) = p; c(end + 1) = q;       % Suppress this maximum and its close neighbors.      p1 = p - (nhood(1) - 1)/2; p2 = p + (nhood(1) - 1)/2;      q1 = q - (nhood(2) - 1)/2; q2 = q + (nhood(2) - 1)/2;      [pp, qq] = ndgrid(p1:p2,q1:q2);      pp = pp(:); qq = qq(:);       % Throw away neighbor coordinates that are out of bounds in      % the rho direction.      badrho = find((pp < 1) | (pp > size(h, 1)));      pp(badrho) = []; qq(badrho) = [];       % For coordinates that are out of bounds in the theta      % direction, we want to consider that H is antisymmetric      % along the rho axis for theta = +/- 90 degrees.      theta_too_low = find(qq < 1);      qq(theta_too_low) = size(h, 2) + qq(theta_too_low);      pp(theta_too_low) = size(h, 1) - pp(theta_too_low) + 1;      theta_too_high = find(qq > size(h, 2));      qq(theta_too_high) = qq(theta_too_high) - size(h, 2);      pp(theta_too_high) = size(h, 1) - pp(theta_too_high) + 1;       % Convert to linear indices to zero out all the values.      hnew(sub2ind(size(hnew), pp, qq)) = 0;       done = length(r) == numpeaks;   else      done = true;   endend I get an error each time with different nhood values:Input: P=houghpeaks(H,5,'threshhold',ceil(0.3*max(H(:))));Error:P=houghpeaks(H,5,'threshhold',ceil(0.3*max(H(:))));error: nhood(2): out of bound 1error: called from    houghpeaks at line 44 column 10 Any thoughts?Best,Ariel