help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: HoughPeaks function


From: Pantxo
Subject: Re: HoughPeaks function
Date: Tue, 6 Nov 2018 10:39:52 -0600 (CST)

ariel.solomon wrote
> 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);
> 
> end
> 
> if nargin < 3
> 
>    threshold = 0.5 * max(h(:));
> 
> end
> 
> if 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;
> 
>    end
> 
> end
> 
>  
> 
> 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 1
> 
> error: called from
> 
>     houghpeaks at line 44 column 10
> 
>  
> 
> Any thoughts?
> 
> Best,
> 
> Ariel

Hi,

I think the error message tells you that you the NHOOD argument you have
supplied is scalar while the documentation states it should be a two-element
vector.

Pantxo



--
Sent from: http://octave.1599824.n4.nabble.com/Octave-General-f1599825.html



reply via email to

[Prev in Thread] Current Thread [Next in Thread]