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, mida talle antakse, sealhulgas müra — tuleta toorpilti ja iga üksiku piksli kõikumine näeb välja nagu serv. Konvolutsioon Gaussi funktsiooniga (samm 2) enne seda keskmistab selle müra maha, mõjutamata peaaegu üldse suuremahulisi intensiivsusmuutusi, mis on tegelikud servad — seepärast siluvad kõik praktilised gradiendipõhised tuvastajad enne diferentseerimist. Sobeli tuumad ise on osaliste tuletiste ∂I/∂x ja ∂I/∂y separeeritavad lähendid, kaalutud 1-2-1 risti oleva telje ulatuses, et kaldutada hinnangut keskmise rea või veeru poole. Ühe läve rakendamine tulemuse suurusele sunnib võimatu valiku ette: kui see seada madalaks, täpib müra väljundit, kui kõrgeks, siis madala kontrastiga servad murduvad katkendlikeks fragmentideks. Hüsterees (samm 6) pääseb sellest kompromissist ühe asemel kahte läve kasutades — kõrge lävi (T_high) leiab servad, milles ollakse kindel, ning madal lävi (T_low), mida rakendatakse ainult pikslitele, mis juba puudutavad tugevat serva, laseb tõelisel piirjoonel jätkuda läbi ajutiselt nõrga lõigu, ilma et müra saaks alustada oma piirjoont. See on sama kahe läve idee, mida kasutatakse flood-fill segmenteerimisel ja Schmitt-trigger'i skeemides, kõikjal, kus üksik lävi hakkaks vilkuma.

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.

Näiteülesanded

  • Puhtad kujundid - Geomeetrilised kujundid — vaikimisi Canny seaded, puhas binaarne servakaart
  • Malelaua gradient - Malelaud — ideaalsed astmelised servad, maksimaalne Sobeli vastus üleminekutel
  • Trükkplaadi rajad - Trükkplaat — madal s säilitab õhukesed vasktrajektoorid Canny väljundis
  • Silutud nägu - Nägu s=2.5 juures — tugev hägustamine eemaldab tekstuuri, säilitades struktuursed servad