2012-04-16 73 views
4

我想實現在MATLAB中的this paper中提出的廣義霍夫變換。我也嘗試使用this document來理解算法。我被困在計算如何計算梯度角度以找到在R表中使用的Φ。Generalized Hough R-表

我試圖運行這個matlab implementation,但輪廓函數試圖訪問負指數。缺少的功能如下。

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 

回答

3

使用合適的邊緣檢測器。你可以從Sobel operator開始。如wiki文章中所述,梯度角是atan(Gy/Gx)。

0

如果你使用一個共同的邊緣檢測器,檢測邊緣,你應該在第14行更改countor.m的東西象下面這樣:

while (img(i,j)~=1)