В компьютерном зрении очень часто нет идеального универсального способа сделать что-то. Чаще всего мы просто пытаемся найти оператора, увидеть его результаты и проверить, соответствуют ли они нашим потребностям. Это справедливо и для вычисления градиента: оператор Sobel является одним из многих способов вычисления градиента изображения, который доказал свою полезность во многих случаях.
В самом деле, простой оператор градиента мы могли думать даже проще, чем тот, который вы предложить выше:
[-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]
манипуляции с коэффициентами может привести к другим операторам градиентных таких как оператор ScHARR, который дает только немного больше вес в среднем ряду:
[-3 0 3 ]
[-10 0 10]
[-3 0 3 ]
Есть также математические причины этого, такие как отделимости этих фильтров ... но я предпочитаю видеть это как экспериментальное открытие, которое оказалось интересным математическим свойством, поскольку эксперимент, на мой взгляд, лежит в основе компьютерного зрения , только ваше воображение является пределом для создания новых, до тех пор, как она соответствует вашим потребностям ...
Большое вам спасибо за подробный ответ. – Alcott
* «Только ваше воображение - это предел для создания новых, если это соответствует вашим потребностям ...» * - +1. – rayryeng