В рамках своей дипломной работы я пытаюсь реализовать детектор углов с помощью алгоритма Харриса и Стивенса: Комбинированный детектор углов и краев
Я вычисляю:
- X- и y-отклонения с фильтрами Собеля (3x3)
Рассчитать системную матрицу M
M = [A C; C B]
что означает, если я получил все в порядке:
- A = Response of sobel_x squared: Ix * Ix (at certain pixel)
- B = ответ sobel_y в квадрате: Iy * Iy (в определенном пикселе)
- C = ответ sobel_x, умноженный на ответ sobel_y: Ix * Iy (в определенном пикселе)
теперь я вычисляю трассировку (M) и что меня особенно беспокоит: определитель (M)
В этой статье они предлагают следующее приближение для определителя, поскольку оно позволяет избежать дорогостоящего вычисления собственных значений:
дет (М) = А * В - С ^ 2
Это должно всегда заканчиваться на Zero!
Выражение det(M) = A * B - C^2 можно переписать как: (используя знание пункта 2)
дет(М) = А * В - С * С
det(M) = Ix*Ix * Iy*Iy - Ix*Iy * Ix*Iy
det(M) = Ix*Ix * Iy*Iy - Ix*Ix * Iy*Iy
дет (М) = 0
Так почему я должен даже беспокоиться о вычислении определителя? Насколько я вижу, достаточно вычислить след! (Или я где-то допустил серьезную ошибку?)