2

グレースケール画像の円を検出するためにハフ変換アルゴリズムを実装しようとしています。エッジ検出器を実行し、半径が存在する線を取得するために、各ポイントでグラデーションの方向を使用しました。次に、中心(cX、cY)と半径rの各円の投票を累積しようとしました。

% run edge detection on image
Edges = edgeDetect(img);
% initialize accumulator matrix
Acc = zeros(imgRows, imgCols, maxR);    
% get indices of edge points
edgePoints = find(Edges);
% get number of edg points
numOfEdges = size(edgePoints);

for currEdge = 1 : numOfEdges

    % get edge cartesian coordinate
    [eY eX] = ind2sub([imgRows, imgCols], edgePoints(currEdge));        
    % find gradient's direction at this point
    theta = Directions(eY, eX);

    for r  = minR : maxR

        % find center point according to polar representation of circle
        cX = round( eX - r*cos(theta) );
        cY = round( eY - r*sin(theta) );

        % check if (cX,cY) is within image's boundaries
        if 1 <= cX && cX <= imgCols && 1 <= cY && cY <= imgRows

            % found a circle with (cX,cY) as center and r as radius
            Acc(cY, cX, r) = Acc(cY, cX, r) + 1; % increment matching counter

        end            
    end        
end

ただし、アキュムレータ(Acc)の最大値は10です。したがって、円のカウント方法に問題があると思います。私はそれをデバッグしようとしましたが、問題がどこにあるのかわかりませんでした...何が間違っている可能性がありますか?どんな助けでも大歓迎です!

4

0 に答える 0