Skip navigation

Canny éldetektor

Canny éldetektor

Főbb lépések

Eredménykét bináris képet kapunk (élpont vagy sem).

  • Simítás Gauss függvénnyel
    • Nagyobb szigma esetén nagyobb méretű éleket detektálhatunk
    • Kisebb szigma a finomabb részleteket is detektálja
  • Gradiens operátor (Sobel)
    • Választható környezetmérettel
  • Nem-maximális élek elnyomása
    • Egy lokális környezetben csak a legnagyobb gradiens magnitúdó érték marad meg
    •  Vékony él-kezdemények maradnak
  • Hiszterézis küszöbölés (alsó és felső küszöbértékkel)
    • Ha nagyobb az él erőssége, mint a felső küszöbérték, akkor megtartjuk
    • Ha kisebb az él erőssége, mint az alsó küszöbérték, akkor elvetjük
    • Kettő közötti értékek esetén akkor tartjuk meg él pontnak, ha van olyan szomszédja, ami él
    • Javasolt arány a küszöbökértékekre 2:1 és 3:1 között

OpenCV megvalósítás

edges = cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]])

Paraméterek:

  • threshold1 és threshold2: alsó és felső küszöb a hiszterézis küszöböléshez (Sobel magnitúdó képen értelmezett!)
  • apertureSize: maszkméret Sobel gradiens operátorhoz
  • L2gradient: logikai érték, a gradiens magnitúdó számítási módja (pontosabb vagy gyorsabb legyen)

Előzetesen simítsuk a képet a megfelelő kernellel, mert a Canny függvény ezt a lépést nem tartalmazza!

Canny példaprogramok

07_04_a_Canny.py: Canny élkeresés rögzített értékekkel.

import cv2

img = cv2.imread('OpenCV-logo.png', cv2.IMREAD_GRAYSCALE)
# img = cv2.imread('GolyoAlszik_rs.jpg', cv2.IMREAD_GRAYSCALE)

blurred = cv2.GaussianBlur(img, (5, 5), 2.0)

edges = cv2.Canny(blurred, 100, 200, None, 5, True)

cv2.imshow('Canny', edges)

cv2.waitKey(0)

cv2.destroyAllWindows()

07_04_b_Canny.py: Interaktív változat. A program meghatározza a magnitúdó képen előforduló maximális értéket, és a hiszterézis küszöbértékeket ez alapján automatikusan állítja be a maximális érték 10 és 20 százalékának megfelelően.

Feladatok

Próbáljuk ki a Canny élkeresést többféle képre!