我正在尝试在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);
非常感谢您的时间和回答。