Strona głównaArtykuły

Sobel, Laplasjan i Canny: Jak Algorytmy Detekcji Krawędzi Znajdują Granice

Techniczne porównanie klasycznej pipeline detekcji krawędzi wykorzystywanej w obrazobezpieczalnictwie, od prostej macierzy gradientowych do wielostopniowego detektora Canny, i dlaczego każda faza istnieje.

mysimulator teamZaktualizowano — czerwiec 2026≈ 5 min czytania▶ Otwórz symulację

Dlaczego krawędzie są ważniejsze od prostych pikseli

Krawędź w obrazie to lokalizacja, gdzie szybko się zmienia jasność — granica obiektu względem tła, linia, na której opada cień, sylwetka drogi przeciwko niebu. Krawędzie kompresują ogrom ilość wizualnej informacji do małej, strukturalnej zestawu krzywych: zamiast myśleć o milionach osobnych wartości pikseli, algorytm może myśleć o kilku konturach, które opisują kształty obecne w scenerii. To dlatego detekcja krawędzi była jedną z pierwszych problemów, na które pozwoliły badania w dziedzinie komputerowej wizji od lat siedemdziesiątych i osiemdziesiątych, a także dlaczego pozostaje fundamentem bardziej zaawansowanych systemów dzisiaj, od detekcji kierunków jazdy samochodów autonomicznych do segmentacji obrazów medycznych.

Na poziomie matematycznym, krawędź odpowiada dużemu gradientowi — szybkiej zmiany intensywności piksela podczas przemieszczania się przez obraz w jakimkolwiek kierunku. Jeśli narysujesz jasność po kolei na lini przechodzącej przez krawędź, widzisz coś zbliżonego do funkcji skokowej: prawie płaską, a następnie szybkie wzrost lub spadek, a potem ponownie płaską. Detektory krawędzi są na podstawie swojej natury algorytmem estymującym ten stopień zmiany dla każdego piksela i następnie decydującym, które lokalizacje mają wystarczająco duży stopień zmiany, aby być uznane za prawdziwą krawędź, a nie szum.

Detektorzy oparte na gradientach: Sobel i Prewitt

Najprostszym sposobem szacowania prędkości zmiany na dyskretnym siatce pikseli jest przybliżenie różniczkowe skończonego różniczkowania, a dokładnie to, co robi operator Sobel. Operator Sobel używa dwóch 3×3 kerneli — jeden do wykrywania gradientów poziomych, drugi pionowych:

Sobel X (gradienty poziome): Sobel Y (gradienty pionowe): [-1 0 1] [-1 -2 -1] [-2 0 2] [ 0 0 0] [-1 0 1] [ 1 2 1] Korelacja obrazu z Sobel X tworzy mapę Gx, która reaguje silnie na krawędzie pionowe (ponieważ pomiaruje zmiany poziome); Sobel Y tworzy mapę Gy, która reaguje na krawędzie poziome. Kombinując oba kerneli w wielkość gradientu G = sqrt(Gx² + Gy²), otrzymujemy mapę siły krawędzi czułą na granicach o dowolnym kierunku, a stosunek atan2(Gy, Gx) daje kierunek każdego z krawędzi. Dodatkowe waga 2 dla centrowego rzędu lub kolumny (w porównaniu do starszego i prostszego operatora Prewitt, który używa jednorodnych 1) sprawia, że Sobel jest mniej wrażliwy na szum, bo preferuje piksele bliższe punktowi ocenianemu.

Operatory gradientowe, takie jak Sobel, są szybkie i łatwe do interpretacji, ale sami z siebie tworzą gęste, rozmyte pasy krawędziami zamiast jasnych lini krawędziowych o jednym pikselu szerokości, a są wrażliwe na szum — pojedynczy odrobinę jasny piksel może zarejestrować fałszywą krawędź. To jest przeszkoda, którą starają się zamknąć bardziej elaborowane strumienie pracy, takie jak Canny.

Sobel X (horizontal gradient):    Sobel Y (vertical gradient):
[-1  0  1]                        [-1 -2 -1]
[-2  0  2]                        [ 0  0  0]
[-1  0  1]                        [ 1  2  1]

Wykrywanie drugiej pochodnej: Operator Laplasa

Gdzie Sobel pomiaruje pierwszą pochodną (prędkość zmian) jasności, operator Laplasa pomierza drugą pochodną (prędkość zmian prędkości zmian). Popularny dyskretny kernel operatora Laplasa wygląda tak:

[ 0 1 0] [ 1 -4 1] [ 0 1 0] Pojedyncza cecha drugiej pochodnej polega na tym, że przechodzi przez zero dokładnie w punkcie, gdzie pierwsza pochodna osiąga maksimum — to znaczy dokładnie w samym obrzeżu, a nie gdzieś w rozmytym obszarze jegookoło. Ta zachowanie „przerzucania się przez zero” daje w teorii bardzo dokładne lokalizacje obrzeży. W praktyce druga pochodna pogłębia szum jeszcze bardziej agresywnie niż pierwsza pochodna, co jest powodem dla tego, że operator Laplasa prawie zawsze stosuje się po rozmyciu Gaussianowskim, które usmocniło dalekoszklone szumu — kombinacja znana jako Laplasjan Gaussowski (LoG), lub efektywnie przybliżona jako Różnicja Gaussowskich (DoG), to samo podstawowe element, który SIFT później ponownie wykorzystał do wykrywania punktów kluczowych w kształcie kuli na wielu skalach.

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

Detektor granic Canny: Pięciostopniowy Proces

Publikowany przez Johna Canny w 1986 roku, detektor granic Canny nadal jest domyślną opcją w większości zestawów narzędzi wizji komputerowej, ponieważ jasno rozwiązuje słabości operatora gradientowego poprzez zintegrowany czterostopniowy proces, a nie pojedyncze przekształcenie.

Stopień 1 — Zmniejszenie szumów. Obraz jest najpierw rozmyty za pomocą filtru Gaussiana. Ponieważ obliczenia gradientu zwiększają szum, usunięcie wysokofrekansowych szumów przed różniczkowaniem jest kluczowe; wielkość kernele Gaussiana stanowi trade-off między redukcją szumu a utratą szczegółów granicznych.

Stopień 2 — Obliczanie gradientu. Operatory Sobela obliczają wartość i kierunek gradientu dla każdego piksela, dokładnie jak opisano wyżej, tworząc mapę siły potencjalnych granic oraz ich kierunków.

Stopień 3 — Supresja maksimum lokalnego. Jest to krok, który przekształca grube pasy gradientu w cienkie linie o jedno pikselowe szerokości. W każdym piksele algorytm sprawdza dwóch sąsiadów leżących wzdłuż kierunku gradientu (perpendykularnie do granicy) i zachowuje bieżący piksel tylko wtedy, gdy jego wartość gradientu jest maksimum lokalnego w porównaniu z tymi sąsiedzimi pikselami; w przeciwnym razie jest go zredukowany do zera. Wynikiem jest to, że tylko jedno najmocniejsze piksele na szerokości każdej granicy przeżywa.

Stopień 4 — Supresja hysteryzy. Zamiast pojedynczego prógów, Canny używa dwóch prógów: wysokiego i niskiego. Każdy piksel o wartości gradientu powyżej wysokiego progu jest natychmiast akceptowany jako silna granica. Pikielki poniżej niskiego progu są odrzucane. Pikielki pomiędzy tymi dwoma prógami są zachowywane tylko wtedy, gdy są połączone, poprzez łańcuch pikseli sąsiadujących, z pikselem powyżej wysokiego progu — to pozwala na prawdziwej kontinuowanej granicy przetrwać nawet tam, gdzie jej siła maleje lekko, podczas gdy izolowane słabe odpowiedzi nie połączone z czymś silnym są odrzucane jako szum.

W OpenCV cały ten proces jest pojedynczym wywołaniem cv2.Canny(image, low_threshold, high_threshold), ale wartości obu prógów mają kluczowe znaczenie w praktyce: za niski i wyjście będzie pełne szumowych, fałszywych granic; za wysoki prawdziwe, lecz słabe granice znikną. Powszechnym heurystycznym początkiem jest ustawienie niskiego progu na około jedno trzecie wysokościowego progu i regulowanie obu wartości w zależności od reprezentatywnych obrazów — co dokładnie pasuje do parametrów, które korzystają z interaktywnej skali przediałowej demonstracji, gdzie można śledzić zmiany liczby wykrytych granic i ich kontynuacji w czasie rzeczywistym podczas przesuwania obu prógów.

Porównanie Trzech Podchodów w Praktyce

Sobel jest najświeższym i najprostszym rozwiązaniem, użytecznym przy potrzebach mapy magnetyzmu gradientu lub gdy informacje o krawędziach zostaną przetworzone przez dalszy algorytm (np. detektor rogu Harris) zamiast być widziane bezpośrednio — jest to blok budowy, a nie końcowy wynik. Detekcja oparta na Laplacie daje dobre lokalizacje po kontroli szumu za pomocą przefiltrowania gaussowskiego, a struktura przejścia przez zero sprawia, że jest atrakcyjna dla zadań wymagających pozycji krawędzi podprocentowych, ale jest bardziej wrażliwa na szum niż Canny'ego, który ma przystrojoną dalszą procedurę. Canny pozostaje domyślnym rozwiązaniem praktycznym dla większości zastosowań — detekcja ściegek drogowych, detekcja granic dokumentów, odczyt konturowy ogólnoprzemysłowy — dokładnie dlatego, że supresja maksimum i dwuwymiarowe próby graniczne rozwiązują dwa główne wady (thick edges — grube krawędzie i wrażliwość na szum) przystępnego gradientu, co kosztuje dodatkowym obciążeniem obliczeniowym i dwoma próbkami granicami zamiast jednej.

Często zadawane pytania

Dlaczego Canny zastosowuje rozmycie Gaussowskie przed wykrywaniem krawędzi?

Diferencjaacja zwiększa czułość na szum, dlatego gradient obliczony na nieprzygotowanym obrazie tworzy wiele fałszywych krawędzi ze względu na szum sensorowy i detale tekstury. Rozmycie pozwala najpierw usunąć ten wysokofrequentny szum, zachowując jednocześnie prawdziwe, duże skalmarnie przejścia intencji.

Co exactly robi redukcja do maksimum lokalnego?

Zakłóca szerokie pasy pikseli o wysokiej gradientowej wartości na jednoukrotne linie piksela, sprawdzając, czy obecny piksel ma lokalnie największą wartość gradientu; tylko lokalne maksima przetrwują, reszta ustawiana jest na zero.

Dlaczego Canny używa dwóch prógów zamiast jednego?

Jeden próg wymusza decyzję all-or-nothing, co albo pozwalając na przejście szumu, albo rozbijając kontinuowane krawędzie na fragmenty. Histeretyczne ustawianie prógów akceptuje natychmiastowe krawędzie, odrzucając słabe, izolowane odpowiedzi, a zachowując tylko brzegi graniczne, gdy łączą się one z silną krawędzią, co zachowuje kontinuację bez pozwolenia na przejście szumu.

Czy operator Laplasa jest kiedykolwiek używany bez rozmycia Gaussowskiego?

Może to być zrobione, ale wynik jest często za szumowy, aby być użyteczny, ponieważ druga pochodna reaguje jeszcze bardziej na szum piksela niż operator pierwszej pochodnej, jak np. Sobel. Kombinacja z rozmyciem (Laplacian of Gaussian) jest standardowym podejściem.

Jaki detector krawędzi powinnien być użyty w rzeczywistym projekcie?

Na ogólne wykrywanie granic, Canny jest domyślną praktyczna opcją z powodu czystszego i szerszego wyjścia oraz wbudowanej obsługi szumu. Sobel jest lepszy, gdy potrzebujesz oryginalnej wartości gradientu i kierunku jako intermedialnego cechy dla innych algorytmów, a nie mapy końcowej krawędzi.

Wypróbuj na żywo

Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz Sobel, Laplacian and Canny: Edge Detection Lab i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.

▶ Otwórz symulację Sobel, Laplacian and Canny: Edge Detection Lab

Co znalazłeś?

Dodaj kroki odtworzenia (opcjonalnie)