Разрешение угла градиента Собеля

При применении оператора Собеля к изображению в направлениях X и Y и вычислении угла (atan2) из результирующего вектора X/Y я, кажется, получаю направления градиента с шагом 45 градусов. Выдает ли Sobel только 8 направлений с шагом 45 градусов, или я должен получить точные углы, или это может быть ошибка округления?

Я использую свертку Собеля для Gx и Gy, упомянутых здесь https://en.wikipedia.org/wiki/Sobel_operator


person Erik Aigner    schedule 14.12.2016    source источник
comment
Оператор Собеля получит направление градиента всего за 1 угол, а не за несколько. Можете ли вы показать MCVE?   -  person Ander Biguri    schedule 14.12.2016
comment
Извините, недостаточно описал. Я вычисляю sobel для X и Y. Обновленный вопрос.   -  person Erik Aigner    schedule 14.12.2016
comment
Вы по-прежнему не показываете никакого кода, который может воспроизвести ваши утверждения. Собель, если он вычисляется на плавающем изображении, не должен давать вам такой 45-градусной дискретизации. Я предполагаю, что у вас есть ошибки округления целых чисел, но трудно сказать, не видя кода.   -  person Imanol Luengo    schedule 14.12.2016
comment
@ImanolLuengo технически да, это улучшает в основном эти 8 направлений. я пишу ответ   -  person Ander Biguri    schedule 14.12.2016
comment
Если вы просто используете Gx и Gy, а не диагональные операторы Собеля, и вы делаете atan2(Gx/Gy), как предлагает Иманол, то у вас могут быть проблемы с плавающей запятой/целым числом.   -  person Ander Biguri    schedule 14.12.2016


Ответы (1)


Да, используя классифицирующие операторы Собеля. Давайте попробуем понять, что вы здесь делаете:

Оператор Собеля для обнаружения вертикальных линий выглядит так:

[-1 0 1
 -2 0 2
 -1 0 1]

Если вы примените это к пикселю (поместите это поверх пикселя и используйте значения в соседних пикселях, а затем сложите все), оно будет иметь ненулевое значение только в том случае, если пиксели справа имеют разные значения, как пиксели в левый. Если это так, значит, есть вертикальный край.

Далее 45-градусный оператор Собеля:

[-2 -1  0
 -1  0  1
 0   1  2]

Если вы поняли, как работает вертикальный, это должно быть легко понять. самые большие значения будут иметь место, когда диагональ этой матрицы имеет разные значения, таким образом, край 45 градусов.

Прежде чем продолжить, давайте отметим одну вещь, упомянутую @ImanolLuengo в комментариях: 45-градусный оператор Собеля фактически увидит 30-градусный наклон, он просто даст ему меньшее значение. Это улучшит его меньше. Вы можете проверить это самостоятельно, если хотите.

Теперь, с матрицей 3x3, вы можете видеть, что будет довольно сложно получить 30-градусное преимущество, в основном потому, что тот факт, что ядро, которое мы используем, незаметное и маленькое (3x3), не позволяет нам создать питомник, который усиливает другие углы.

Однако, используя ту же логику, что и в операторе Собеля, мы можем думать о ядре большего размера, которое может увеличить любой произвольный угол.

Например, следующее ядро ​​в основном улучшит 30 градусов:

[1  1  1  1  0 
 1  1  0  0  0 
 0  0  0 -1 -1 
 0 -1 -1 -1 -1]

Это «ручное приближение ядра», потому что, как вы заметили в Sobel, некоторые элементы ядра имеют большие числа, чем другие. Правило для этих чисел: более высокое значение в направлении края, которое вы хотите обнаружить, и более высокое значение в тех, которые на самом деле проходят через центр ядра.

Это не будет оператор Собеля, но вы можете просто составить любое ядро, которое будет выполнять ту работу, которую вы хотите.

person Ander Biguri    schedule 14.12.2016
comment
Я думаю, что операция предназначалась для вычисления atan2(Gy, Gx), будучи Gx и Gy горизонтальными и вертикальными фильтрами соответственно. - person Imanol Luengo; 14.12.2016
comment
Это то, что я понял из вычисления угла из результирующего вектора X/Y, по крайней мере, ха-ха. - person Imanol Luengo; 14.12.2016
comment
@ImanolLuengo может быть, он добавил информацию о Gx Gy позже ›.‹. КАК есть операторы Собеля для 8 направлений по умолчанию Я ответил, предполагая, что он использует эти - person Ander Biguri; 14.12.2016