Generalized Hough R-Table

hough-transform, matlab

Solution

Use a suitable edge detector. You could start off with the Sobel operator. The gradient angle is atan(Gy/Gx) as described in the wiki article.

Problem

I am trying to implement the generalized Hough transform as presented in this paper in MATLAB. I've also tried using this document to understand the algorithm. I am stuck on figuring out how to calculate the gradient angle to find Φ to use in the R-Table. I have tried to run this matlab implementation, but the contour function tries to access negative indices. The missing functions are below. distance.m ``` function [ d ] = distance( x1, y1, x2, y2 ) d = sqrt( (x2-x1)^2 + (y2-y1)^2 ); end ``` barycenter.m ``` function [ xo, yo ] = barycenter( img ) % gravitational center coordinates of a shape [rows, cols] = size(img); x = ones(rows, 1)*(1:cols); y = (1:rows)'*ones(1,cols); area = sum(sum(img)); xo = sum(sum(double(img) .* x)) / area; yo = sum(sum(double(img) .* y)) / area; end ``` modelHough.m ``` function [H]=ModelHough(imgRGB) % Generalized Hough Transform Modeling % Image Binarization imgBW = rgb2gray(imgRGB); imgBI = imgBW < 255; % Retrieving information about the contour: points and number (N) N = contour(imgBI); % Model initialization: % row = beta value * 100 % column = number of the couple (alpha, distance) % 3rd dimension: 1 = alpha, 2 = distance H=zeros(round(100*2*pi),N,2); % Compute of the barycenter coordinates [ xo, yo ] = barycenter(imgBI); % for each contour point for i=1:N % beta compute for ith contour point b = beta(N, imgBI, i); % research of the first column k=1; while H(b+1,k,2)~=0 k=k+1; end % compute of the alpha value H(b+1, k, 1) = alpha(N, i, imgBI); % compute of the distance value H(b+1, k, 2) = distance( xo, yo, i, b ); end ```

Original source