Из ссылок выше я понял, что вычисляются «приближенные» «производные» по оси Х (по строчкам) – Gx, по оси Y (по столбцам) – Gy.
Задача: «В точке Р22 найти градиент яркости, т.е. его направление и величину.»
- Задача.png (1021 байт) Просмотров: 9119
Берем 3х3 пикселей.
Раньше я предположил, что надо найти разницу между центром и пикселями вокруг него и выбрать максимум, но ведь максимумы могут быть сразу в нескольких направлениях.
Оператор Собеля получается не учитывается не только центр, но и соседние пиксели по столбцам или строкам в зависимости от того какую «производную» находят.
«Производная» по оси Х (по строчкам) – Gx находится «свертыванием», звучит странно, а на деле получается следующее:
- ОсьХ.png (2.05 КиБ) Просмотров: 9126
Gx = Р11*-1 + Р12*0 + Р13*1 + Р21*-2 + Р22*0 + Р23*2 + Р31*-1 + Р32*0 + Р33*1
По идее если убрать все лишнее, то получится
Gx = Р11*-1 + Р13*1 + Р21*-2 + Р23*2 + Р31*-1 + Р33*1
Gx = - Р11 + Р13 + -2*Р21 + 2*Р23 - Р31 + Р33
Gx = 1*(Р13 - Р11) + 2*(Р23 - Р21) + 1*(Р33 - Р31)
Например, берем первую строчку пикселей. Применяем к ней ось Х, т.е. за (0) точку отсчета берем Р12, соответственно влево идет минус, вправо идет плюс, по идее яркость должна нарастать слева направо, если будет наоборот, то результат получится со знаком минус. И так со второй и третьей строкой.
Я так понял, что находим разницы первой, второй и третьей строчки построчно
Р13-Р11, Р23-Р21, Р33-Р31. Далее эти построчные разницы умножаются на соответствующие коэффициенты и складываются между собой, получается число Gx.
Почему выбраны коэффициенты 1, 2, 1 не знаю. Скорее всего, это типа весовые коэффициенты влияния.
Для столбцов, получится так
- Gy.png (1.71 КиБ) Просмотров: 9125
Gy = Р11*-1 + Р12*-2 + Р13*-1 + Р21*0 + Р22*0 + Р23*0 + Р31*1 + Р32*2 + Р33*1
Gy = -Р11 -2*Р12 - Р13 + Р31 + 2*Р32 + Р33
Gy = 1*(Р31-Р11) + 2*(Р32-Р12) + 1*(Р33-Р13)
Для Gy так же находятся разницы, но по столбцам, Р31-Р11, Р32-Р12, Р33-Р13 (подразумевается что яркость должна увеличиваться сверху вниз по столбцу). И опять разницы умножаются на коэффициенты 1, 2, 1 и складываются между собой. Получаем число Gy.
Теперь вроде направление градиента, точнее угол можно вычислить по формуле:
alfa=arctan(Gy/Gx)
Но вот незадача, угол от арктангенса получается в диапазоне от (-90)-(0)-(+90), т.е. всего 180 гр – «полоборота», а если считать только + то всего 90 град.
Вот пример, того как углы одинаковые получаются, хотя направления по идее разные.
По столбцам перевернул оператор, сделал увеличение яркости снизу вверх, так как ось Y в прямоугольных координатах стандартно идет снизу вверх.
45градусов
- ++.png (8.85 КиБ) Просмотров: 9113
другие 45 градусов
- --.png (8.88 КиБ) Просмотров: 9125
-45градусов
- -+.png (8.66 КиБ) Просмотров: 9141
другие -45градусов
- +-.png (8.5 КиБ) Просмотров: 9150
Как перевести в нормальные 360 градусов?