Я пытаюсь реализовать грубое преобразование для строк в Matlab. И я боролся с этим в течение нескольких дней, я не знаю, почему мой код работает не так, как должен. Да, это часть домашней работы, но, пожалуйста, помогите мне, потому что я полностью сдался.
Входные параметры: Т.е. - логическое изображение «ребра» (0 означает не ребро, 1 означает ребро).
function [out_ro, out_theta]=houghTransform(Ie,nBinsRo,nBinsTheta,tresh)
A = zeros(nBinsRo, nBinsTheta);
theta = 1:nBinsTheta;
theta = scale(theta, nBinsTheta, 1, (pi / 2), - (pi / 2));
D = size(diag(Ie));
D = D(1);
ro = 1:nBinsRo;
ro = scale(ro, nBinsRo, 1, D, -D);
len = size(Ie);
%checks all edges
for i = 1:len(1)
for j = 1:len(2)
%if it is an edge
if ((Ie(i,j) == 1))
%generate all functions x cos(theta) + y sin(theta) = ro
for m=1:nBinsTheta
roVal = i * cos(theta(m)) + j * sin(theta(m));
idx = scale2(roVal, D, -D, nBinsRo, 1);
if (idx > 0 && idx < nBinsRo)
A(idx, m) = A(idx, m) + 1;
end
end
end
end
end
figure(1);
clf;
imagesc(A)
% -------------------------------------------------- %
function idx = scale(val, max_val_in, min_val_in, max_val_out, min_val_out)
skalirni_faktor = (max_val_out - min_val_out) / (max_val_in - min_val_in) ;
idx = min_val_out + (val-min_val_in) .* skalirni_faktor;
% -------------------------------------------------- %
function idx = scale2(val, max_val_in, min_val_in, max_val_out, min_val_out)
skalirni_faktor = (max_val_out - min_val_out) / (max_val_in - min_val_in) ;
idx = min_val_out + round((val-min_val_in) .* skalirni_faktor);
Большое спасибо за ваше время и ответы.