Sobeli ja Canny servatuvastaja

Suuna testpilt läbi kogu robotinägemise taga oleva servatuvastuse töövoo — halltoonid, Gaussi hägustus, Sobeli gradiendid, mittemaksimumide summutamine, Canny hüsterees — ja liigu mis tahes sammu kohale, et uurida ühe piksli taga olevat matemaatikat.

Interaktiivse simulatsiooni laadimine...

miks hägustada enne, ja miks kaks läve 🖖

Tuletis võimendab kõike, ka müra. Kui diferentseerida töötlemata pilti, paistab iga ühe piksli suurune kõikumine servana. Esmalt Gaussi filtriga konvolveerimine (samm 2) keskmistab müra välja, kuid mõjutab väga vähe suuremõõtmelisi intensiivsuse muutusi, mis vastavad tegelikele servadele. Seepärast siluvad kõik praktilised gradiendipõhised detektorid pilti enne diferentseerimist. Sobeli tuumad on osatuletiste ∂I/∂x ja ∂I/∂y lahutatavad lähendid. Risttelje suunas kasutatakse kaale 1-2-1, et hinnang lähtuks eeskätt keskmisest reast või veerust. Gradiendi moodulile ühe läve rakendamine sunnib tegema võimatu valiku: madala läve korral täitub tulemus müratäppidega, kõrge läve korral lagunevad väikese kontrastsusega servad katkendlikeks lõikudeks. Hüsterees (samm 6) väldib seda vastuolu, kasutades ühe läve asemel kaht. Kõrge lävi (Thigh) leiab servad, milles saab kindel olla. Madalat läve (Tlow) rakendatakse ainult pikslitele, mis juba puutuvad kokku tugeva servaga. Nii saab tegelik kontuur ajutiselt nõrgas lõigus jätkuda, ilma et müra saaks uut kontuuri algatada. Sama kahe läve põhimõtet kasutatakse täitmisel põhinevas segmentimises ja Schmitti trigeriga lülitustes kõikjal, kus üksainus lävi põhjustaks värelemist.

Kaks küsimust ühe pildi kohta 🖖

Sobel ja Canny esitavad sama pildi kohta erinevaid küsimusi. Sobel loob gradiendikaardi: iga piksel saab arvu selle kohta, kui järsult heledus seal muutub, mistõttu servad tulevad paksud ja halltoonides, nagu pehme kuma. Canny võtab sama gradiendi ja sunnib peale otsuse — mittemaksimumide summutamine jätab alles vaid heledaima piksli üle iga harja laiuse, peenendades kuma teravaks ühe piksli laiuseks jooneks, ja märgib selle siis servaks või mitte. Vaheta kaarte Gradient ja Canny, et näha, kuidas hägune kaart taandub puhtaks kontuuriks.

Canny servad peidavad sisseehitatud kompromissi 🖖

John Canny ei jõudnud retseptini katse-eksituse teel. Oma 1986. aasta artiklis sõnastas ta servatuvastuse optimeerimisülesandena kolme eesmärgiga — leida päris servad, paigutada need täpselt ja reageerida iga serva kohta vaid korra — ning lahendas selle variatsioonarvutusega; lahenduseks tuli peaaegu täpselt Gaussi funktsiooni esimene tuletis. Konks, mille ta samuti tõestas: tuvastus ja lokaliseerimine tõmbavad vastassuundades, mida laiemaks hägustus läheb — suurem σ leiab nõrgemad servad, kuid määrib nende asukohta, ja ükski σ pole mõlemas parim. Liiguta σ ja vaata ise.

Ülesanne täielikult lahendatud

  1. Gradiendi suurus malelaua testpildi pikslis (31, 3) 9 sammu

    Malelaua testpilt — puhas must ja valge, ruudud 32 pikslit laiad — parameetriga σ = 1,0 koos 3×3 hägustustuumaga, Tlo = 30 ja Thi = 80. Tuleta gradiendi moodul pikslil (31, 3), mis on viimane valge veerg enne esimest vertikaalset piiri, ning arvuta seejärel, mitme piksli laiuseks kujuneb serv, kuhu see kuulub.

    1. Esmalt halltoonid, ning sellel pildil ei tee see midagi: kolm kaalu annavad summaks täpselt 1, seega võrdse punase, rohelise ja sinise sisendiga piksel säilitab oma väärtuse. Valge jääb väärtusele 255, must 0-le, seega kõik allpool toodud arvud tulenevad just neist kahest väärtusest.

    2. Gaussi kaalud kahanevad kauguse ruuduga. Väärtusel σ = 1 saab tsenter kaaluks 1, serva jagavad 4 pikslit saavad e-0,5 = 0,6065 ja 4 nurka e-1 = 0,3679; läbi jagamine kogusummaga 4,8976 teeb neist kaalutud keskmise.

    3. Rida 3 asub sügaval horisontaalse riba sees, mistõttu mis tahes akna 3 rida on seal identsed ja tuuma vertikaalne struktuur taandub välja. Olulised on vaid selle veergude summad, ja neid on üksnes 2.

    4. Hägustamine üle piiri. Kohal x = 31 katab aken 2 valget veergu ja 1 musta; kohal x = 32 katab see 1 valge ja 2 musta. Järsk hüpe 255-lt 0-le on muutunud sujuvaks üleminekuks 255, 185, 70, 0 — need keskmised 2 väärtust, ümardatult, ongi need, mida inspektor kuvab.

    5. Sobel kaalub vasakut veergu teguritega -1, -2, -1 ja paremat teguritega +1, +2, +1 ning keskmist veergu ei kaalu üldse. Kui kõik 3 rida on võrdsed, taanduvad need kaalud ühekordseks teguriks 4, seega on kogu konvolutsioon 4 korda suurem kui kahe poole veergude vahe.

    6. Vertikaalne gradient kaob peegelpildilise põhjuse tõttu: pikslist ülal- ja allpool asuv rida koosnevad samast 3 arvust, mistõttu summa +1, +2, +1 taandab summa -1, -2, -1 liikmeti välja. Selle serva gradient on puhtalt horisontaalne, mis teebki järgmise sammu lihtsaks.

    7. Neid kahte kombineerides on moodul lihtsalt horisontaalne gradient.

    8. Võrdle sellega, mida sama serv annaks ilma hägustamata: pelk hüpe 255 üle sama tuuma. Silumine on kulutanud 280 ühikut, veidi üle 27% olemasolevast vastusest, ning see on mürataluvuse hind — mitte ümardamiskadu, vaid teadlik vahetuskaup.

    9. Nüüd korda seda ühe veeru võrra paremal. Kohal x = 32 loeb aken 185, 70, 0, seega on vahe taas -185 ja moodul taas 740. Ühe veeru võrra kaugemal mõlemal pool langeb vahe umbes -70-le ja moodul 280-le.

    Vastus

    740 — ja serv tuleb 2 piksli laiune. Mittemaksimumide mahasurumine säilitab piksli siis, kui selle moodul on ≥ mõlemast naabrist piki gradienti. Siin on gradient suunatud piki x-telge, seega võrreldakse pikslit 31 vasakul asuva 280 ja paremal asuva 740-ga, pikslit 32 aga 740 ja 280-ga. Kumbki annab teisega viigi ning viik rahuldab tingimust ≥, mistõttu jäävad mõlemad ellu; väärtusel 740 on mõlemad enam kui 9 korda suuremad kui Thi = 80, seega tulevad mõlemad valged. Ükski lävepaar ei suuda neid eraldada, sest läved ei ole põhjuseks. Tegelik piir asub kohal x = 31,5, täpselt poolel teel viimase valge ja esimese musta piksli vahel, ning sümmeetriline hägustamine jätab gradiendi selle pooltäisarvu suhtes sümmeetriliseks — pole olemas ühteainust maksimumi, mida leida. Seda tasub teada enne mis tahes häälestamist: dubleeritud joon servakaardil on vahel lävendamisviga ja vahel aritmeetika, ning siin on tegu võrdsusega 740 = 740 pildil, mille ruudud juhtuvad olema täisarvu pikslite laiused.

Allikad (1)

Näiteülesanded

  • Puhtad kujundid - Vaikeolek: σ = 1,4, läved 30 ja 80 ning avatud Canny vahekaart. Selge geomeetria puhul meenutab ühe piksli laiune kontuur kõige enam joonistust.
  • Malelaua gradient - Ainus eelseadistus, mis peatub gradiendikaardil: otsuse asemel kuvatakse paks hall kuma. Samu parameetreid kasutatakse ka näidisülesandes: σ = 1,0, Tlo = 30, Thi = 80.
  • Trükkplaadi rajad - σ = 0,8 annab siin kõige nõrgema hägustuse ja hoiab peened vaskrajad tervena. Läved on samad mis näopildil, seega erineb nende kahe puhul ainult σ.
  • Silutud nägu - σ = 2,5 ja 5×5 tuum annavad samade lävede juures kolm korda tugevama hägustuse kui trükkplaadi näites. Tekstuur kaob, struktuur säilib ning servade asukohad hajuvad.