Оператор Собеля: відмінності між версіями

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
[неперевірена версія][перевірена версія]
Вилучено вміст Додано вміст
замінено перекладом «Sobel operator»
Рядок 1: Рядок 1:
{{Виявляння ознак (комп'ютерний зір)}}
{{Виявляння ознак (комп'ютерний зір)}}


[[Файл:Valve_original_(1).PNG|праворуч|міні|300x300пкс| Кольорове зображення рушія]]
'''Оператор Собеля''' використовується в [[обробка зображень|обробці зображень]] для [[виділення границь]]. Це [[дискретний диференціальний оператор]], що обчислює наближене значення [[градієнт]]а чи норми градієнта для яскравості зображення. Оператор Собеля базується на згортці зображення невеликими сепарабельними цілочисельними фільтрами в вертикальному та горизонтальному напрямках. Хоча, апроксимація градієнта досить груба, особливо на високочастотних ділянках зображення.
[[Файл:Valve_sobel_(3).PNG|праворуч|міні|300x300пкс| Оператор Собеля, застосований до цього зображення]]


'''Опера́тор Со́беля''' ({{lang-en|Sobel operator}}), який іноді називають '''опера́тором Со́беля&nbsp;— Фе́льдмана''' ({{lang-en|Sobel–Feldman operator}}) та '''фі́льтром Со́беля''' ({{lang-en|Sobel filter}}), використовують в [[Цифрова обробка зображень|обробці зображень]] та [[Комп'ютерне бачення|комп'ютернім баченні]], зокрема в алгоритмах [[виявляння контурів]], де він створює зображення, яке виділяє контури. Його названо на честь {{нп|Ірвін Собель|Ірвіна Собеля||Irwin Sobel}} та {{нп|Гері Фельдман|Гері Фельдмана||Gary Feldman}}, колег зі {{нп|Стенфордська лабораторія штучного інтелекту|Стенфордської лабораторії штучного інтелекту||Stanford Artificial Intelligence Laboratory}} ({{lang-en|SAIL}}). Собель та Фельдман запропонували ідею «<nowiki/>[[Ізотропія|ізотропного]] оператора градієнта зображення 3&nbsp;×&nbsp;3» на виступі в ''SAIL'' у 1968 році.<ref>Irwin Sobel, 2014, [https://www.researchgate.net/publication/239398674_An_Isotropic_3_3_Image_Gradient_Operator ''History and Definition of the Sobel Operator''] {{ref-en}}</ref> Технічно це {{нп|Різницевий оператор|оператор дискретного диференціювання||Difference operator}}, який обчислює наближення {{нп|Градієнт зображення|градієнта||Image gradient}} функції яскравості зображення. У кожній точці зображення результат оператора Собеля&nbsp;— Фельдмана&nbsp;— або відповідний вектор градієнта, або [[Норма (математика)|норма]] цього вектора. Оператор Собеля&nbsp;— Фельдмана ґрунтується на згортанні зображення з невеликим роздільним цілочисловим фільтром в горизонтальному та вертикальному напрямках, і тому відносно невитратний з погляду обчислень. З іншого боку, наближення градієнтна, яке він створює, відносно грубе, зокрема для високочастотних мінливостей на зображенні.
== Визначення ==
Оператор використовує ядра 3×3, з якими [[Згортка (обробка зображень)|згортає]] зображення для обчислення наближених значень [[часткова похідна|часткових похідних]] по горизонталі та по вертикалі. Якщо '''A''' вихідне зображення, а '''G'''<sub>''x''</sub> та '''G'''<sub>''y''</sub> — два зображення, де кожна точка містить часткові похідні по x та по y відповідно. Вони обчислюються наступним чином:


== Формулювання ==
:<math>

Цей оператор використовує два ядра 3×3, які [[Згортка (обробка зображень)|згортають]] з первинним зображенням, щоб обчислювати наближення [[Похідна зображення|похідних]]&nbsp;— однієї для горизонтальних змін, та однієї для вертикальних. Якщо ми визначимо '''A''' як первинне зображення, а '''G'''<sub>''x''</sub> та '''G'''<sub>''y''</sub>&nbsp;— два зображення, що в кожній точці містять наближення горизонтальної та вертикальної похідних відповідно, то ці обчислення такі:<ref>[http://homepages.inf.ed.ac.uk/rbf/HIPR2/sobel.htm Feature Detectors – Sobel Edge Detector] {{ref-en}}</ref>

: <math>
\mathbf{G}_x = \begin{bmatrix}
+1 & 0 & -1 \\
+2 & 0 & -2 \\
+1 & 0 & -1
\end{bmatrix} * \mathbf{A},
\quad
\mathbf{G}_y = \begin{bmatrix}
\mathbf{G}_y = \begin{bmatrix}
-1 & -2 & -1 \\
+1 & +2 & +1\\
0 & 0 & 0 \\
0 & 0 & 0 \\
+1 & +2 & +1
-1 & -2 & -1
\end{bmatrix} * \mathbf{A}
\end{bmatrix} * \mathbf{A}
</math>


де <math>*</math> позначує операцію [[Згортка (обробка зображень)|згортки]] у двовимірній обробці сигналу.

Оскільки ядра Собеля можливо розкласти як добутки усереднювального та диференціювального ядер, вони обчислюють градієнт зі згладжуванням. Наприклад, <math>\mathbf{G}_x</math> можливо записати як

: <math>
\mathbf{G}_x = \begin{bmatrix}
1 \\
2 \\
1
\end{bmatrix} * \left ( \begin{bmatrix}
+1 & 0 & -1
\end{bmatrix} * \mathbf{A} \right ),
\quad
\quad
\mathbf{G}_y = \begin{bmatrix}
\mbox{and}
+1 \\
\quad
0 \\
-1
\end{bmatrix} * \left ( \begin{bmatrix}
1 & 2 & 1
\end{bmatrix} * \mathbf{A} \right )
</math>


Координату ''x'' тут визначено як зростальну «праворуч», а координату ''y''&nbsp;— як зростальну «донизу». У кожній точці зображення отримані наближення градієнта можливо об'єднувати, щоб отримувати величину градієнта, використовуючи

: <math>\mathbf{G} = \sqrt{ {\mathbf{G}_x}^2 + {\mathbf{G}_y}^2 }</math>

Використовуючи цю інформацію, ми також можемо обчислювати напрямок градієнта:

: <math>\mathbf{\Theta} = \operatorname{atan2}( \mathbf{G}_y, \mathbf{G}_x )</math>

де, наприклад, <math>\mathbf{\Theta}</math> дорівнює 0 для вертикального контуру, що світліший з правого боку (щодо <math>\operatorname{atan2}</math> див. {{нп|atan2}}).

== Формальніше ==

Оскільки функція яскравості цифрового зображення відома лише в дискретних точках, похідні цієї функції неможливо визначити, якщо ми не припустимо, що в основі лежить диференційовна функція яскравості, з якої було зроблено вибірку в точках зображення. За деяких додаткових припущень похідну неперервної функції яскравості можливо обчислювати як функцію вибіркової функції яскравості, тобто цифрового зображення. Виявляється, що похідні в будь-якій конкретній точці є функціями значень яскравості практично в усіх точках зображення. Проте наближення цих похідних функцій можливо визначити з меншим або більшим ступенем точності.

Оператор Собеля&nbsp;— Фельдмана пропонує доволі неточне наближення градієнта зображення, але все ще має достатню якість для практичного використання в багатьох застосуваннях. Точніше, він використовує значення яскравості лише в області 3×3 навколо кожної точки зображення, щоби наблизити відповідний градієнт зображення, й використовує лише цілі значення для коефіцієнтів, які зважують яскравості зображення, щоб отримати наближення градієнта.

== Розширення на інші виміри ==

Оператор Собеля&nbsp;— Фельдмана складається з двох роздільних дій:<ref>{{cite book | title= Real-time volume graphics |author= K. Engel| year=2006| pages=112–114}} {{ref-en}}</ref>

* Згладжування перпендикулярно напрямку похідної за допомогою трикутного фільтра: <math>h(-1) = 1, h(0) = 2, h(1) = 1</math>
* Простої центральної різниці в напрямку похідної: <math>h'(-1) = 1, h'(0) = 0, h'(1) = -1</math>

Фільтри Собеля&nbsp;— Фельдмана для [[Похідна зображення|похідних зображення]] в різних вимірностях, де <math>x,y,z,t \in \left\{0, -1, 1\right\}</math>:

1 вимір: <math>h_x'(x) = h'(x);</math>

2 виміри: <math>h_x'(x,y) = h'(x)h(y)</math>

2 виміри: <math>h_y'(x,y) = h(x)h'(y)</math>


3 виміри: <math>h_y'(x,y,z) = h(x)h'(y)h(z)</math>

3 виміри: <math>h_z'(x,y,z) = h(x)h(y)h'(z)</math>

4 виміри: <math>h_x'(x,y,z,t) = h'(x)h(y)h(z)h(t)</math>

Тож, як приклад, тривимірне ядро Собеля&nbsp;— Фельдмана в напрямку ''z'':

: <math>
h_z'(:,:,-1) =
\begin{bmatrix}
+1 & +2 & +1 \\
+2 & +4 & +2 \\
+1 & +2 & +1
\end{bmatrix}
\quad
h_z'(:,:,0) =
\begin{bmatrix}
0 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 0
\end{bmatrix}
\quad
h_z'(:,:,1) =
\begin{bmatrix}
-1 & -2 & -1 \\
-2 & -4 & -2 \\
-1 & -2 & -1
\end{bmatrix}
</math>

== Технічні деталі ==

Як наслідок його визначення, оператор Собеля можливо втілювати простими засобами як в апаратному, так і в програмному забезпеченні: для обчислення відповідного результату потрібні лише вісім точок зображення навколо точки, а для обчислення наближення вектора градієнта потрібна лише цілочислова арифметика. Крім того, обидва описані вище дискретні фільтри роздільні:

: <math>\begin{bmatrix}
1 & 0 & -1 \\
2 & 0 & -2 \\
1 & 0 & -1
\end{bmatrix} = \begin{bmatrix}
1 \\
2 \\
1
\end{bmatrix} \begin{bmatrix}
1 & 0 & -1
\end{bmatrix} = \begin{bmatrix}
1 \\
1
\end{bmatrix} * \begin{bmatrix}
1 \\
1
\end{bmatrix} \begin{bmatrix}
1 & -1
\end{bmatrix} * \begin{bmatrix}
1 & 1
\end{bmatrix}</math>

: <math>\begin{bmatrix}
\ \ 1 & \ \ 2 & \ \ 1 \\
\ \ 0 & \ \ 0 & \ \ 0 \\
-1 & -2 & -1
\end{bmatrix} = \begin{bmatrix}
\ \ 1 \\
\ \ 0 \\
-1
\end{bmatrix} \begin{bmatrix}
1 & 2 & 1
\end{bmatrix} = \begin{bmatrix}
1 \\
1
\end{bmatrix} * \begin{bmatrix}
\ \ 1 \\
-1
\end{bmatrix} \begin{bmatrix}
1 & 1
\end{bmatrix} * \begin{bmatrix}
1 & 1
\end{bmatrix}
</math>

й тому дві похідні '''G'''<sub>''x''</sub> та '''G'''<sub>''y''</sub> можливо обчислювати як

: <math>
\mathbf{G}_x = \begin{bmatrix}
\mathbf{G}_x = \begin{bmatrix}
-1 & 0 & +1 \\
1 \\
-2 & 0 & +2 \\
2 \\
1
-1 & 0 & +1
\end{bmatrix} * \mathbf{A}
\end{bmatrix} * \left ( \begin{bmatrix}
1 & 0 & -1
\end{bmatrix} * \mathbf{A} \right ),
\quad
\mathbf{G}_y = \begin{bmatrix}
\ \ 1 \\
\ \ 0 \\
-1
\end{bmatrix} * \left ( \begin{bmatrix}
1 & 2 & 1
\end{bmatrix} * \mathbf{A} \right )
</math>
</math>


У деяких втіленнях це роздільне обчислення може бути вигідним, оскільки передбачає менше арифметичних обчислень для кожної точки зображення.
де <math>*</math> позначає двовимірну операцію згортки.


Застосування згортки ''K'' до групи пікселів ''P'' можливо подати псевдокодом як
Координата x зростає «направо», а y — «вниз». Для кожної точки зображення наближене значення градієнта обчислюється через наближенні значення часткових похідних:


: N(x,y) = Сума { K(i,j).P(x-i,y-j)}, для i,j з -1 по 1.
: <math>\mathbf{G} = \sqrt{ {\mathbf{G}_x}^2 + {\mathbf{G}_y}^2 }</math>


N(x,y) подає нову матрицю, отримувану після застосування згортки ''K'' до ''P'', де ''P''&nbsp;— піксельна матриця.
а також напрямок градієнта:
: <math>\mathbf{\Theta} = \operatorname{arctan}\left({ \mathbf{G}_y \over \mathbf{G}_x }\right)</math>


== Приклад ==
де, наприклад, кут '''Θ''' рівний нулю для вертикальної границі, в якої темна сторона зліва.


Результат оператора Собеля&nbsp;— Фельдмана&nbsp;— це двовимірна мапа градієнта в кожній точці. Її можливо обробляти та розглядати так, ніби вона й сама є зображенням, із областями високого градієнта (імовірними контурами), видимими як білі лінії. Наступні зображення ілюструють це, показуючи обчислення оператора Собеля&nbsp;— Фельдмана на простому зображенні.
Значення функції існує тільки на регулярній сітці, тому, щиро кажучи, не можна знаходити похідні, але припустивши неперервність функції можна застосувати [[скінченні різниці]], а саме оператор Собеля для апроксимації часткових похідних.

{|
|[[Файл:Bikesgray.jpg|міні|200x200пкс| Перевірне зображення цегляної стіни та велостоянки у відтінках сірого]]
|[[Файл:Bikesgraysobel.jpg|міні|200x200пкс| Нормована величина градієнта від оператора Собеля&nbsp;— Фельдмана]]
|-
|[[Файл:Bikesgraygv.jpg|міні|200x200пкс| Нормований ''x''-градієнт від оператора Собеля&nbsp;— Фельдмана]]
|[[Файл:Bikesgraygh.jpg|міні|200x200пкс| Нормований ''y''-градієнт від оператора Собеля&nbsp;— Фельдмана]]
|}

Наведені нижче зображення ілюструють зміну напрямку градієнта на [[Круг|крузі]] у відтінках сірого. Коли знаки <math>\mathbf{G_x}</math> та <math>\mathbf{G_y}</math> однакові, кут градієнта додатний, а коли різні, від'ємний. У наведеному нижче прикладі червоний і жовтий кольори на контурі кола позначують додатні кути, а синій та блакитний&nbsp;— від'ємні. Вертикальні контури ліворуч і праворуч кола мають кут 0, оскільки немає локальної зміни в <math>\mathbf{G_y}</math>. Горизонтальні ребра вгорі та внизу кола мають кути −{{ндріб|{{pi}}|2}} та {{ндріб|{{pi}}|2}} відповідно, оскільки немає локальних змін у <math>\mathbf{G_x}</math>. Від'ємний кут для верхнього контуру означає перехід від світлої області до темної, а додатний кут для нижнього контуру означає перехід від темної області до світлої. Усі інші пікселі позначено чорним через відсутність локальних змін <math>\mathbf{G_x}</math> та <math>\mathbf{G_y}</math>, і тому кут невизначений. Оскільки кут є функцією відношення <math>\mathbf{G_y}</math> до <math>\mathbf{G_x}</math>, пікселі з малими темпами зміни все ще можуть викликати велику реакцію кута. В результаті шум може викликати велику реакцію кута, що зазвичай є небажаним. Використовуючи інформацію про кут градієнта для застосувань обробки зображень, слід докладати зусиль, щоб усунути [[Цифровий шум зображення|шум зображення]] задля зменшення цієї помилкової реакції.

{|
|[[Файл:Black_Circle.jpg|міні|150x150пкс| Зображення чорного [[круг]]а з білим тлом у відтінках сірого.]]
|[[Файл:Sobel_Operator_Gradient_Angle.JPG|міні|180x180пкс| Напрямок градієнта оператора Собеля.]]
|}

== Альтернативні оператори ==

Оператор Собеля&nbsp;— Фельдмана, хоч і зменшує артефакти, пов'язані з чистим оператором центральних різниць, не демонструє доброї обертової симетрії (приблизно 1° похибки). Шарр шукав можливість оптимізувати цю властивість, створивши ядра, оптимізовані для конкретної заданої числової точності (цілі числа, числа з рухомою комою…) та розмірності (1 вимір, 2 виміри, 3).<ref>Scharr, Hanno, 2000, Dissertation (in German), [http://nbn-resolving.de/urn/resolver.pl?urn=urn:nbn:de:bsz:16-opus-9622 ''Optimal Operators in Digital Image Processing'' ]. {{ref-de}}</ref><ref>B. Jähne, H. Scharr, and S. Körkel. Principles of filter design. In Handbook of Computer Vision and Applications. Academic Press, 1999. {{ref-en}}</ref> Там було запропоновано оптимізовані ядра тривимірних фільтрів розміром до 5×5×5, але найчастіше використовуваними ядрами з похибкою близько 0,2° є

: <math>
h_x'(:,:) =
\begin{bmatrix}
+3 & 0 & -3 \\
+10 & 0 & -10 \\
+3 & 0 & -3
\end{bmatrix}
\ \ \ \ \ \ \ \ \
h_y'(:,:) =
\begin{bmatrix}
+3 & +10 & +3 \\
0 & 0 & 0 \\
-3 & -10 & -3
\end{bmatrix}
</math>

Це розкладається аналогічно:

* <math>\begin{bmatrix}
3 & 10 & 3
\end{bmatrix} = \begin{bmatrix}
3 & 1
\end{bmatrix} * \begin{bmatrix}
1 & 3
\end{bmatrix}</math>

{{якірець|Оператор Шарра}}'''Опера́тори Ша́рра''' ({{lang-en|Scharr operators}})&nbsp;— це результат оптимізації, яка мінімізує зважену [[Середньоквадратична похибка|середньоквадратичну]] кутову похибку в [[Область Фур'є|області Фур'є]]. Ця оптимізація виконується за умови, що отримані фільтри чисельно узгоджені. Тому вони дійсно є ядрами похідних, а не просто дотримуються обмежень симетрії. Оптимальним 8-бітним цілочисловим фільтром 3x3, що випливає з теорії Шарра, є

: <math>
h_x'(:,:) =
\begin{bmatrix}
47 & 0 & -47 \\
162 & 0 & -162 \\
47 & 0 & -47
\end{bmatrix}
\ \ \ \ \ \ \ \ \
h_y'(:,:) =
\begin{bmatrix}
47 & 162 & 47 \\
0 & 0 & 0 \\
-47 & -162 & -47
\end{bmatrix}
</math>

Подібну стратегію оптимізації та отримані фільтри також запропонували Фарид і Сімончеллі.<ref>H. Farid and E. P. Simoncelli, [http://www.cs.dartmouth.edu/~farid/downloads/publications/caip97.pdf ''Optimally Rotation-Equivariant Directional Derivative Kernels''], Int'l Conf Computer Analysis of Images and Patterns, pp. 207–214, Sep 1997. {{ref-en}}</ref><ref>H. Farid and E. P. Simoncelli, [http://www.cns.nyu.edu/pub/lcv/farid03-reprint.pdf ''Differentiation of discrete multi-dimensional signals''], IEEE Trans Image Processing, vol.13(4), pp. 496–508, Apr 2004. {{ref-en}}</ref> Вони також досліджують схеми похідних вищого порядку. На відміну від роботи Шарра, ці фільтри не повинні бути чисельно узгодженими.

Задачу проєктування фільтрів похідних було переглянуто, наприклад, Круном.<ref>D. Kroon, 2009, Short Paper University Twente, [http://www.k-zone.nl/Kroon_DerivativePaper.pdf ''Numerical Optimization of Kernel-Based Image Derivatives'' ]. {{ref-en}}</ref>

Фільтри похідних на основі довільних кубічних сплайнів запропонував Гаст.<ref>A. Hast., [http://www.sciencedirect.com/science/article/pii/S0167865514000282 "Simple filter design for first and second order derivatives by a double filtering approach"], Pattern Recognition Letters, Vol. 42, no.1 June, pp. 65–71. 2014. {{ref-en}}</ref> Він показав, як можливо правильно обчислювати похідні першого та другого порядку за допомогою кубічних чи тригонометричних сплайнів за допомогою підходу подвійного фільтрування, який дає фільтри довжини 7.

Іншим подібним оператором, який спочатку було породжено з оператора Собеля, є [[оператор Каялі]],<ref>{{Cite journal|last=Dim|first=Jules R.|last2=Takamura|first2=Tamio|date=2013-12-11|title=Alternative Approach for Satellite Cloud Classification: Edge Gradient Application|journal=Advances in Meteorology|language=en|volume=2013|pages=1–8|doi=10.1155/2013/584816|issn=1687-9309|doi-access=free}} {{ref-en}}</ref> згортковий фільтр 3x3 на основі ідеальної обертової симетрії.

Напрямково оптимальні ядра похідних значно знижують систематичні похибки в оцінюванні [[Оптичний потік|оптичного потоку]]. Більші схеми з іще більшою точністю та сімействами оптимізованих фільтрів для розширеного оцінювання оптичного потоку було запропоновано в подальшій роботі Шарра.<ref name="Scharr pp. 14–29">{{cite book | last=Scharr | first=Hanno | title=Complex Motion | chapter=Optimal Filters for Extended Optical Flow | series=Lecture Notes in Computer Science | year=2007 | volume=3417 | publisher=Springer Berlin Heidelberg | location=Berlin, Heidelberg | isbn=978-3-540-69864-7 | doi=10.1007/978-3-540-69866-1_2 | pages=14–29}} {{ref-en}}</ref> Було досліджено набори фільтрів похідних другого порядку для прозорого [[оцінювання руху]].<ref>Scharr, Hanno, [http://www.eurasip.org/Proceedings/Eusipco/Eusipco2007/Papers/a2l-g03.pdf ''OPTIMAL SECOND ORDER DERIVATIVE FILTER FAMILIES FOR TRANSPARENT MOTION ESTIMATION'' ] 15th European Signal Processing Conference (EUSIPCO 2007), Poznan, Poland, September 3–7, 2007. {{ref-en}}</ref> Було помічено, що чим більші отримані ядра, тим краще вони наближують фільтри похідних гауссіана.

== Приклад порівняння ==

Тут використовують чотири різні оператори градієнта для оцінювання величини градієнта перевірного зображення.

{|
|[[Файл:Bikesgray.jpg|міні|200x200пкс| Перевірне зображення цегляної стіни та велостоянки у відтінках сірого]]
|[[Файл:Bikesgray_sobel.JPG|міні|200x200пкс| Величина градієнта від оператора Собеля&nbsp;— Фельдмана]]
|[[Файл:Bikesgray-scharr.png|міні|200x200пкс| Величина градієнта від оператора Шарра]]
|-
|[[Файл:Bikesgray_roberts.JPG|міні|200x200пкс| Величина градієнта від [[Оператор Робертса|оператора Робертса]]]]
|[[Файл:Bikesgray_prewitt.JPG|міні|200x200пкс|Величина градієнта від [[Оператор Прюітт|оператора Прюітт]]]]
|}

== Втілення в ''MATLAB'' ==

<syntaxhighlight lang="matlab">
clc
clear all
close all

test_img = imread('gantrycrane.png');
gray_img = rgb2gray(test_img);
sobel_img = sobel(gray_img);

figure
imshow(test_img)

figure
imshow(gray_img)

figure
imshow(sobel_img)

function output_image = sobel(A)
Gx = [-1 0 1; -2 0 2; -1 0 1]
Gy = [-1 -2 -1; 0 0 0; 1 2 1]

rows = size(A, 1)
columns = size(A, 2)
mag = zeros(size(A));

A = double(A);

for i=1:rows-2
for j=1:columns-2
S1 = sum(sum(Gx.*A(i:i+2, j:j+2)));
S2 = sum(sum(Gy.*A(i:i+2, j:j+2)));

mag(i + 1, j + 1) = sqrt(S1.^2 + S2.^2);
end
end

threshold = 70 % залежить віл застосування [0–255]
output_image = max(mag, threshold);
output_image(output_image == round(threshold)) = 0;
end
</syntaxhighlight>

Наведений вище код ''[[MATLAB]]'' для демонстрування фільтра Собеля використовуватиме зображення, що йде в пакеті з самою ''MATLAB'' ('gantrycrane.png'). На виході будуть первинне зображення, версія первинного зображення у відтінках сірого, та результат фільтра Собеля.


== Див. також ==
== Див. також ==

* [[Цифрова обробка зображень]]
* [[Цифрова обробка зображень]]
* [[Виявляння ознак (комп'ютерне бачення)]]
* [[Виявляння ознак (комп'ютерне бачення)]]
Рядок 43: Рядок 330:
* {{нп|Дискретний оператор Лапласа|||Discrete Laplace operator}}
* {{нп|Дискретний оператор Лапласа|||Discrete Laplace operator}}
* [[Оператор Прюітт]]
* [[Оператор Прюітт]]
* [[Похідна зображення]]


== Примітки ==
{{Без джерел|дата=грудень 2010}}
{{примітки}}

== Посилання ==
{{Вікіпідручник|:en:Fractals/Computer_graphic_techniques/2D#Sobel_filter}}

* [http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/sobel_derivatives/sobel_derivatives.html Виявляння контурів Собеля в ''OpenCV'']
* [https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.sobel.html Фільтр Собеля] в бібліотеці ''Python'' ''[[SciPy]]''
* [http://www.informatik.uni-trier.de/~ley/db/indices/a-tree/s/Sobel:Irwin.html Бібліографічні посилання на Ірвіна Собеля] в ''[[DBLP]]''
* [http://www.mathworks.com/discovery/edge-detection.html Приклад виявляння контурів Собеля за допомогою комп'ютерних алгоритмів]


[[Категорія:Обробка зображень]]
[[Категорія:Виділення ознак (комп'ютерний зір)]]

Версія за 16:20, 6 листопада 2022

Кольорове зображення рушія
Оператор Собеля, застосований до цього зображення

Опера́тор Со́беля (англ. Sobel operator), який іноді називають опера́тором Со́беля — Фе́льдмана (англ. Sobel–Feldman operator) та фі́льтром Со́беля (англ. Sobel filter), використовують в обробці зображень та комп'ютернім баченні, зокрема в алгоритмах виявляння контурів, де він створює зображення, яке виділяє контури. Його названо на честь Ірвіна Собеля[en] та Гері Фельдмана[en], колег зі Стенфордської лабораторії штучного інтелекту[en] (англ. SAIL). Собель та Фельдман запропонували ідею «ізотропного оператора градієнта зображення 3 × 3» на виступі в SAIL у 1968 році.[1] Технічно це оператор дискретного диференціювання[en], який обчислює наближення градієнта[en] функції яскравості зображення. У кожній точці зображення результат оператора Собеля — Фельдмана — або відповідний вектор градієнта, або норма цього вектора. Оператор Собеля — Фельдмана ґрунтується на згортанні зображення з невеликим роздільним цілочисловим фільтром в горизонтальному та вертикальному напрямках, і тому відносно невитратний з погляду обчислень. З іншого боку, наближення градієнтна, яке він створює, відносно грубе, зокрема для високочастотних мінливостей на зображенні.

Формулювання

Цей оператор використовує два ядра 3×3, які згортають з первинним зображенням, щоб обчислювати наближення похідних — однієї для горизонтальних змін, та однієї для вертикальних. Якщо ми визначимо A як первинне зображення, а Gx та Gy — два зображення, що в кожній точці містять наближення горизонтальної та вертикальної похідних відповідно, то ці обчислення такі:[2]

де позначує операцію згортки у двовимірній обробці сигналу.

Оскільки ядра Собеля можливо розкласти як добутки усереднювального та диференціювального ядер, вони обчислюють градієнт зі згладжуванням. Наприклад, можливо записати як

Координату x тут визначено як зростальну «праворуч», а координату y — як зростальну «донизу». У кожній точці зображення отримані наближення градієнта можливо об'єднувати, щоб отримувати величину градієнта, використовуючи

Використовуючи цю інформацію, ми також можемо обчислювати напрямок градієнта:

де, наприклад, дорівнює 0 для вертикального контуру, що світліший з правого боку (щодо див. atan2[en]).

Формальніше

Оскільки функція яскравості цифрового зображення відома лише в дискретних точках, похідні цієї функції неможливо визначити, якщо ми не припустимо, що в основі лежить диференційовна функція яскравості, з якої було зроблено вибірку в точках зображення. За деяких додаткових припущень похідну неперервної функції яскравості можливо обчислювати як функцію вибіркової функції яскравості, тобто цифрового зображення. Виявляється, що похідні в будь-якій конкретній точці є функціями значень яскравості практично в усіх точках зображення. Проте наближення цих похідних функцій можливо визначити з меншим або більшим ступенем точності.

Оператор Собеля — Фельдмана пропонує доволі неточне наближення градієнта зображення, але все ще має достатню якість для практичного використання в багатьох застосуваннях. Точніше, він використовує значення яскравості лише в області 3×3 навколо кожної точки зображення, щоби наблизити відповідний градієнт зображення, й використовує лише цілі значення для коефіцієнтів, які зважують яскравості зображення, щоб отримати наближення градієнта.

Розширення на інші виміри

Оператор Собеля — Фельдмана складається з двох роздільних дій:[3]

  • Згладжування перпендикулярно напрямку похідної за допомогою трикутного фільтра:
  • Простої центральної різниці в напрямку похідної:

Фільтри Собеля — Фельдмана для похідних зображення в різних вимірностях, де :

1 вимір:

2 виміри:

2 виміри:


3 виміри:

3 виміри:

4 виміри:

Тож, як приклад, тривимірне ядро Собеля — Фельдмана в напрямку z:

Технічні деталі

Як наслідок його визначення, оператор Собеля можливо втілювати простими засобами як в апаратному, так і в програмному забезпеченні: для обчислення відповідного результату потрібні лише вісім точок зображення навколо точки, а для обчислення наближення вектора градієнта потрібна лише цілочислова арифметика. Крім того, обидва описані вище дискретні фільтри роздільні:

й тому дві похідні Gx та Gy можливо обчислювати як

У деяких втіленнях це роздільне обчислення може бути вигідним, оскільки передбачає менше арифметичних обчислень для кожної точки зображення.

Застосування згортки K до групи пікселів P можливо подати псевдокодом як

N(x,y) = Сума { K(i,j).P(x-i,y-j)}, для i,j з -1 по 1.

N(x,y) подає нову матрицю, отримувану після застосування згортки K до P, де P — піксельна матриця.

Приклад

Результат оператора Собеля — Фельдмана — це двовимірна мапа градієнта в кожній точці. Її можливо обробляти та розглядати так, ніби вона й сама є зображенням, із областями високого градієнта (імовірними контурами), видимими як білі лінії. Наступні зображення ілюструють це, показуючи обчислення оператора Собеля — Фельдмана на простому зображенні.

Перевірне зображення цегляної стіни та велостоянки у відтінках сірого
Нормована величина градієнта від оператора Собеля — Фельдмана
Нормований x-градієнт від оператора Собеля — Фельдмана
Нормований y-градієнт від оператора Собеля — Фельдмана

Наведені нижче зображення ілюструють зміну напрямку градієнта на крузі у відтінках сірого. Коли знаки та однакові, кут градієнта додатний, а коли різні, від'ємний. У наведеному нижче прикладі червоний і жовтий кольори на контурі кола позначують додатні кути, а синій та блакитний — від'ємні. Вертикальні контури ліворуч і праворуч кола мають кут 0, оскільки немає локальної зміни в . Горизонтальні ребра вгорі та внизу кола мають кути −π2 та π2 відповідно, оскільки немає локальних змін у . Від'ємний кут для верхнього контуру означає перехід від світлої області до темної, а додатний кут для нижнього контуру означає перехід від темної області до світлої. Усі інші пікселі позначено чорним через відсутність локальних змін та , і тому кут невизначений. Оскільки кут є функцією відношення до , пікселі з малими темпами зміни все ще можуть викликати велику реакцію кута. В результаті шум може викликати велику реакцію кута, що зазвичай є небажаним. Використовуючи інформацію про кут градієнта для застосувань обробки зображень, слід докладати зусиль, щоб усунути шум зображення задля зменшення цієї помилкової реакції.

Зображення чорного круга з білим тлом у відтінках сірого.
Напрямок градієнта оператора Собеля.

Альтернативні оператори

Оператор Собеля — Фельдмана, хоч і зменшує артефакти, пов'язані з чистим оператором центральних різниць, не демонструє доброї обертової симетрії (приблизно 1° похибки). Шарр шукав можливість оптимізувати цю властивість, створивши ядра, оптимізовані для конкретної заданої числової точності (цілі числа, числа з рухомою комою…) та розмірності (1 вимір, 2 виміри, 3).[4][5] Там було запропоновано оптимізовані ядра тривимірних фільтрів розміром до 5×5×5, але найчастіше використовуваними ядрами з похибкою близько 0,2° є

Це розкладається аналогічно:

Опера́тори Ша́рра (англ. Scharr operators) — це результат оптимізації, яка мінімізує зважену середньоквадратичну кутову похибку в області Фур'є. Ця оптимізація виконується за умови, що отримані фільтри чисельно узгоджені. Тому вони дійсно є ядрами похідних, а не просто дотримуються обмежень симетрії. Оптимальним 8-бітним цілочисловим фільтром 3x3, що випливає з теорії Шарра, є

Подібну стратегію оптимізації та отримані фільтри також запропонували Фарид і Сімончеллі.[6][7] Вони також досліджують схеми похідних вищого порядку. На відміну від роботи Шарра, ці фільтри не повинні бути чисельно узгодженими.

Задачу проєктування фільтрів похідних було переглянуто, наприклад, Круном.[8]

Фільтри похідних на основі довільних кубічних сплайнів запропонував Гаст.[9] Він показав, як можливо правильно обчислювати похідні першого та другого порядку за допомогою кубічних чи тригонометричних сплайнів за допомогою підходу подвійного фільтрування, який дає фільтри довжини 7.

Іншим подібним оператором, який спочатку було породжено з оператора Собеля, є оператор Каялі,[10] згортковий фільтр 3x3 на основі ідеальної обертової симетрії.

Напрямково оптимальні ядра похідних значно знижують систематичні похибки в оцінюванні оптичного потоку. Більші схеми з іще більшою точністю та сімействами оптимізованих фільтрів для розширеного оцінювання оптичного потоку було запропоновано в подальшій роботі Шарра.[11] Було досліджено набори фільтрів похідних другого порядку для прозорого оцінювання руху.[12] Було помічено, що чим більші отримані ядра, тим краще вони наближують фільтри похідних гауссіана.

Приклад порівняння

Тут використовують чотири різні оператори градієнта для оцінювання величини градієнта перевірного зображення.

Перевірне зображення цегляної стіни та велостоянки у відтінках сірого
Величина градієнта від оператора Собеля — Фельдмана
Величина градієнта від оператора Шарра
Величина градієнта від оператора Робертса
Величина градієнта від оператора Прюітт

Втілення в MATLAB

clc
clear all
close all

test_img = imread('gantrycrane.png');
gray_img = rgb2gray(test_img);
sobel_img = sobel(gray_img);

figure
imshow(test_img)

figure
imshow(gray_img)

figure
imshow(sobel_img)

function output_image = sobel(A)
Gx = [-1 0 1; -2 0 2; -1 0 1]
Gy = [-1 -2 -1; 0 0 0; 1 2 1]

rows = size(A, 1)
columns = size(A, 2)
mag = zeros(size(A));

A = double(A);

for i=1:rows-2
    for j=1:columns-2
	    S1 = sum(sum(Gx.*A(i:i+2, j:j+2)));
	    S2 = sum(sum(Gy.*A(i:i+2, j:j+2)));

	    mag(i + 1, j + 1) = sqrt(S1.^2 + S2.^2);
    end
end

threshold = 70 % залежить віл застосування [0–255]
output_image = max(mag, threshold);
output_image(output_image == round(threshold)) = 0;
end

Наведений вище код MATLAB для демонстрування фільтра Собеля використовуватиме зображення, що йде в пакеті з самою MATLAB ('gantrycrane.png'). На виході будуть первинне зображення, версія первинного зображення у відтінках сірого, та результат фільтра Собеля.

Див. також

Примітки

  1. Irwin Sobel, 2014, History and Definition of the Sobel Operator (англ.)
  2. Feature Detectors – Sobel Edge Detector (англ.)
  3. K. Engel (2006). Real-time volume graphics. с. 112—114. (англ.)
  4. Scharr, Hanno, 2000, Dissertation (in German), Optimal Operators in Digital Image Processing . (нім.)
  5. B. Jähne, H. Scharr, and S. Körkel. Principles of filter design. In Handbook of Computer Vision and Applications. Academic Press, 1999. (англ.)
  6. H. Farid and E. P. Simoncelli, Optimally Rotation-Equivariant Directional Derivative Kernels, Int'l Conf Computer Analysis of Images and Patterns, pp. 207–214, Sep 1997. (англ.)
  7. H. Farid and E. P. Simoncelli, Differentiation of discrete multi-dimensional signals, IEEE Trans Image Processing, vol.13(4), pp. 496–508, Apr 2004. (англ.)
  8. D. Kroon, 2009, Short Paper University Twente, Numerical Optimization of Kernel-Based Image Derivatives . (англ.)
  9. A. Hast., "Simple filter design for first and second order derivatives by a double filtering approach", Pattern Recognition Letters, Vol. 42, no.1 June, pp. 65–71. 2014. (англ.)
  10. Dim, Jules R.; Takamura, Tamio (11 грудня 2013). Alternative Approach for Satellite Cloud Classification: Edge Gradient Application. Advances in Meteorology (англ.). 2013: 1—8. doi:10.1155/2013/584816. ISSN 1687-9309. (англ.)
  11. Scharr, Hanno (2007). Optimal Filters for Extended Optical Flow. Complex Motion. Lecture Notes in Computer Science. Т. 3417. Berlin, Heidelberg: Springer Berlin Heidelberg. с. 14—29. doi:10.1007/978-3-540-69866-1_2. ISBN 978-3-540-69864-7. (англ.)
  12. Scharr, Hanno, OPTIMAL SECOND ORDER DERIVATIVE FILTER FAMILIES FOR TRANSPARENT MOTION ESTIMATION 15th European Signal Processing Conference (EUSIPCO 2007), Poznan, Poland, September 3–7, 2007. (англ.)

Посилання