Есть несколько проблем с вашим кодом. Основная проблема здесь:
ntheta = length(theta);
% ...
for i = (1 : size(allrows))
% ...
for th = (1 : 180)
d = floor(x*cos(th) - y*sin(th));
% ...
th
кажется углом в градусах. cos(th)
бессмысленно. Вместо этого используйте cosd
и sind
.
Другая проблема заключается в том, что th
выполняет итерации от 1 до 180, но нет гарантии, что ntheta
равно 180. Поэтому вместо этого выполните цикл следующим образом:
for i = 1 : size(allrows)
% ...
for j = 1 : numel(theta)
th = theta(j);
% ...
и используйте th
в качестве угла и j
в качестве индекса в H
.
Наконец, учитывая ваше изображение и ожидаемый результат, вы должны сначала применить некоторые функции обнаружения краев (например, Canny). Может быть, вы уже сделали это?