Я нашел реализацию преобразования Hough в MATLAB по адресу Rosetta Code, но у меня возникли проблемы с пониманием этого. Также я хотел бы изменить его, чтобы показать исходное изображение и восстановленные строки (de-Houghing).Преобразование hough в MATLAB без использования функции hough
Любая помощь в понимании этого и де-Хэнга оценивается. Thanks
Почему изображение перевернуто?
theImage = flipud(theImage);
Я не могу обернуть мою голову вокруг функции нормы. Какова его цель, и ее можно избежать?
EDIT: норма просто синоним евклидова расстояния: SQRT (ширина^2 + высота^2)
rhoLimit = norm([width height]);
Может кто-то дать объяснение того, как/почему вычисляются rho, theta и houghSpace?
rho = (-rhoLimit:1:rhoLimit); theta = (0:thetaSampleFrequency:pi); numThetas = numel(theta); houghSpace = zeros(numel(rho),numThetas);
Как бы де-Хау Хаф пространство для воссоздания линий?
Вызов функции с использованием 10x10 образ диагональной линии, созданные с помощью функции идентичности (глаз)
theImage = eye(10)
thetaSampleFrequency = 0.1
[rho,theta,houghSpace] = houghTransform(theImage,thetaSampleFrequency)
фактической функции
function [rho,theta,houghSpace] = houghTransform(theImage,thetaSampleFrequency)
%Define the hough space
theImage = flipud(theImage);
[width,height] = size(theImage);
rhoLimit = norm([width height]);
rho = (-rhoLimit:1:rhoLimit);
theta = (0:thetaSampleFrequency:pi);
numThetas = numel(theta);
houghSpace = zeros(numel(rho),numThetas);
%Find the "edge" pixels
[xIndicies,yIndicies] = find(theImage);
%Preallocate space for the accumulator array
numEdgePixels = numel(xIndicies);
accumulator = zeros(numEdgePixels,numThetas);
%Preallocate cosine and sine calculations to increase speed. In
%addition to precallculating sine and cosine we are also multiplying
%them by the proper pixel weights such that the rows will be indexed by
%the pixel number and the columns will be indexed by the thetas.
%Example: cosine(3,:) is 2*cosine(0 to pi)
% cosine(:,1) is (0 to width of image)*cosine(0)
cosine = (0:width-1)'*cos(theta); %Matrix Outerproduct
sine = (0:height-1)'*sin(theta); %Matrix Outerproduct
accumulator((1:numEdgePixels),:) = cosine(xIndicies,:) + sine(yIndicies,:);
%Scan over the thetas and bin the rhos
for i = (1:numThetas)
houghSpace(:,i) = hist(accumulator(:,i),rho);
end
pcolor(theta,rho,houghSpace);
shading flat;
title('Hough Transform');
xlabel('Theta (radians)');
ylabel('Rho (pixels)');
colormap('gray');
end
Лучше вопрос [DSP.SE] (http://dsp.stackexchange.com/). – Phonon
@Phonon Почему? Речь идет о деталях реализации конкретного алгоритма. –