Tôi đang thực hiện thiết bị dò góc Harris cho mục đích giáo dục nhưng tôi bị kẹt ở phần phản hồi harris. Về cơ bản, những gì tôi đang làm, là:Thực hiện thiết bị dò góc Harris
- Tính gradient cường hình ảnh trong x và y hướng đầu ra
- Blur (1) phản ứng
- Tính Harris qua sản lượng (2)
- Loại bỏ các phi tối đa ở đầu ra của (3) trong một vùng lân cận 3x3 và ngưỡng đầu ra
1 và 2 dường như hoạt động tốt; tuy nhiên, tôi nhận được các giá trị rất nhỏ như phản ứng của Harris và không có điểm nào đạt đến ngưỡng đó. Đầu vào là một nhiếp ảnh ngoài trời tiêu chuẩn.
[...]
[Ix, Iy] = intensityGradients(img);
g = fspecial('gaussian');
Ix = imfilter(Ix, g);
Iy = imfilter(Iy, g);
H = harrisResponse(Ix, Iy);
[...]
function K = harrisResponse(Ix, Iy)
max = 0;
[sy, sx] = size(Ix);
K = zeros(sy, sx);
for i = 1:sx,
for j = 1:sy,
H = [Ix(j,i) * Ix(j,i), Ix(j,i) * Iy(j,i)
Ix(j,i) * Iy(j,i), Iy(j,i) * Iy(j,i)];
K(j,i) = det(H)/trace(H);
if K(j,i) > max,
max = K(j,i);
end
end
end
max
end
Đối với hình mẫu, tối đa kết thúc là 6.4163e-018 có vẻ quá thấp.
Tôi đã hoàn nguyên để không lọc Ix2 vv nữa, do đó có một số lỗi còn lại trong bản sao trên stackoverflow. – Etan
Vấn đề là tôi đã không tổng hợp tất cả các điểm ảnh trong hình vuông 3x3 để tìm ra Ix2 vv; thay vào đó, tôi vừa sử dụng pixel tương ứng. Sau khi thay đổi H theo cách nó tổng hợp tất cả Ix2, Ixy và Iy2 cho tất cả 9 pixel, nó trông rất đẹp. – Etan
det (H)/dấu vết (H) là một xấp xỉ được sử dụng trong trường hợp bạn sẽ không có lambda. – Etan