В компьютерном зрении очень часто нет идеального универсального способа сделать что-то. Чаще всего мы просто пробуем оператора, смотрим его результаты и проверяем, подходят ли они нам. Это верно и для вычисления градиента: оператор Собеля является одним из многих способов вычисления градиента изображения, который доказал свою полезность во многих случаях использования.
Фактически, более простой оператор градиента, который мы могли бы придумать, даже проще, чем тот, который вы предложили выше:
[-1 1]
Несмотря на свою простоту, у этого оператора есть первая проблема: при его использовании вы вычисляете градиент между двумя позициями, а не в одной позиции. Если вы примените его к 2 пикселям (x,y)
и (x+1,y)
, вычислите ли вы градиент в позиции (x,y)
или (x+1,y)
? На самом деле то, что вы вычислили, это градиент в позиции (x+0.5,y)
, а работать с половинными пикселями не очень удобно. Вот почему мы добавляем ноль в середине:
[-1 0 1]
Применив его к пикселям (x-1,y)
, (x,y)
и (x+1,y)
, вы получите градиент для центрального пикселя (x,y)
.
Его также можно рассматривать как свертку двух фильтров [-1 1]
: [-1 1 0]
, который вычисляет градиент в позиции (x-0.5,y)
слева от пикселя, и [0 -1 1]
, который вычисляет градиент справа от пикселя.
Теперь у этого фильтра остался еще один недостаток: он очень чувствителен к шуму. Поэтому мы решили применить его не к одному ряду пикселей, а к 3 рядам: это позволяет получить средний градиент по этим 3 рядам, что смягчит возможный шум:
[-1 0 1]
[-1 0 1]
[-1 0 1]
Но этот имеет тенденцию слишком сильно усреднять вещи: применительно к одной конкретной строке мы теряем большую часть того, что составляет детали этой конкретной строки. Чтобы исправить это, мы хотим придать немного больше веса центральной строке, что позволит нам избавиться от возможного шума, принимая во внимание то, что происходит в предыдущей и следующей строках, но при этом сохраняя специфику этой самой строки. Вот что дает фильтр Собеля:
[-1 0 1]
[-2 0 2]
[-1 0 1]
Изменение коэффициентов может привести к другим операторам градиента, таким как оператор Шарра, который придает немного больше веса центральной строке:
[-3 0 3 ]
[-10 0 10]
[-3 0 3 ]
Для этого есть также математические причины, такие как разделимость этих фильтров... но я предпочитаю рассматривать это как экспериментальное открытие, которое доказало наличие интересных математических свойств, поскольку эксперимент, по моему мнению, находится на первом месте. сердце компьютерного зрения. Только ваше воображение является пределом для создания новых, если оно соответствует вашим потребностям...
person
mbrenon
schedule
13.06.2013