Идентификация градиента заполненной области - PullRequest
1 голос
/ 29 февраля 2012

Я задавал связанный вопрос раньше: Сегментации изображения с областями, заполненными градиентом

Но на этот раз у меня есть более простая проблема (я думаю). Учитывая область (набор пикселей), я хочу знать, заполнена ли она линейным градиентом. Чтобы сделать это, я подумал о том, чтобы определить градиент изображения в направлении x и y с помощью фильтра sobel 3X3, а затем изучить направление градиента. Если это направление остается постоянным, то область может быть классифицирована как область, заполненная градиентом.

Работает для горизонтальных и вертикальных градиентов направления, но не в целом. Например, кажется, что для 45-градусного линейного градиента направление градиента на соседних пикселях довольно сильно варьируется от 1 до 3.

Я не могу понять, почему это происходит и как это исправить. Теоретически, это должно быть 1 везде.

Ответы [ 2 ]

2 голосов
/ 29 февраля 2012

Википедия говорит:

Оператор Собеля, уменьшая артефакты, связанные с оператором чисто центральных разностей, не обладает идеальной симметрией вращения . Шарр посмотрел на оптимизацию этого свойства. Здесь представлены ядра фильтров размером до 5 x 5, но чаще всего используется ...

Вот статья Шарра, счастливого изучения :) http://archiv.ub.uni -heidelberg.de / volltextserver / volltexte / 2000/962 / PDF / Diss.pdf

1 голос
/ 01 марта 2012

Вы правильно поняли, просто используйте фильтры Гаусса, когда вычисляете пространственные производные. Наконец, получите области, заполненные градиентом, выбрав темные пиксели величины градиента ориентационного изображения.

EDIT Статья в Википедии о гауссовых фильтрах .

В моем коде я использую следующие ядра свертки (горизонтальные и вертикальные производные):

{
 {0.00623304, 0.012975, 0., -0.012975, -0.00623304},
 {0.0259501, 0.054019, 0., -0.054019, -0.0259501},
 {0.0581332, 0.121013, 0., -0.121013, -0.0581332},
 {0.0259501, 0.054019, 0., -0.054019, -0.0259501},
 {0.00623304, 0.012975, 0., -0.012975, -0.00623304}
}

{
 {0.00623304, 0.0259501, 0.0581332, 0.0259501, 0.00623304},
 {0.012975, 0.054019, 0.121013, 0.054019, 0.012975},
 {0., 0., 0., 0., 0.},
 {-0.012975, -0.054019, -0.121013, -0.054019, -0.012975},
 {-0.00623304, -0.0259501, -0.0581332, -0.0259501, -0.00623304}
}

В качестве доказательства концепции, это может выглядеть в Mathematica, используя тестовое изображение, которое содержит наклонную область градиента и область вертикального градиента:

enter image description here

...