Seuraava artikkeli auttaa sinua: Erilaisia reunantunnistustekniikoita toteutuksella OpenCV:ssä
Näönkäsittelyn alkuvaiheessa kuvista tunnistetaan piirteitä, jotka ovat tärkeitä kohtauksen esineiden rakenteen ja ominaisuuksien määrittämisessä. Yksi tällainen ominaisuus on reuna. Reunat ovat kuvan merkittäviä paikallisia muutoksia, joista on hyötyä kuva-analyysissä. Reunat näkyvät usein kuvan kahden erillisen osan välisellä rajalla. Valokuvista tiedon hakemisen alkuvaihe on tyypillisesti reunantunnistus. Tässä artikkelissa keskitymme OpenCV:n tarjoaman reunantunnistuksen käsitteen ja tekniikoiden ymmärtämiseen. Seuraavassa on käsiteltävät aiheet.
Sisällysluettelo
- Tietoja reunan tunnistuksesta
- Erilaisia tekniikoita reunan havaitsemiseen
- Kuinka reunantunnistus toimii?
- Opi reunantunnistus OpenCV:llä
Kuvan reunapiste on kuvan piste, jonka koordinaatit ovat merkittävän paikallisen intensiteettisiirtymän paikassa. Aloitetaan ymmärtämällä reunojen käsite ja niistä saatava tieto.
Tietoja reunan tunnistuksesta
Reunojen tunnistus on menetelmä, jota käytetään kuvankäsittelyssä kuvan sisällä olevien objektien tai alueiden rajojen (reunojen) määrittämiseen. Reunat ovat yksi valokuvien tärkeimmistä puolista.
Kuvan reuna on suuri paikallinen muutos kuvan intensiteetissä, joka liittyy usein joko kuvan intensiteetin tai ensimmäisen derivaatan (gradientin) epäjatkuvuuteen. Kuvan intensiteetin epäjatkuvuudet voivat johtua joko askelten epäjatkuvuudesta tai linjan epäjatkuvuudesta.
- Vaiheiden epäjatkuvuudet esiintyy, kun kuvan intensiteetti siirtyy nopeasti yhdestä epäjatkuvuuden toisella puolella olevasta arvosta toiseen arvoon epäjatkuvuuden vastakkaisella puolella.
- Linjojen epäjatkuvuudet esiintyy, kun visuaalinen intensiteetti muuttuu nopeasti, mutta palaa alkuperäiseen arvoonsa lyhyen matkan jälkeen.
Askel- ja viivareunat ovat kuitenkin harvinaisia tosielämän valokuvissa. Varsinaisten signaalien terävät epäjatkuvuudet ovat harvinaisia johtuen matalataajuisista komponenteista tai useimpien anturilaitteiden aiheuttamasta tasoituksesta. Askeleen reunoista tulee rampin reunoja ja linjareunoista katon reunoja, jos intensiteetin muutoksia tapahtuu rajoitetulla etäisyydellä eikä välittömästi.
Miksi reunantunnistusta tarvitaan?
Reunantunnistuksen avulla käyttäjät voivat tutkia kuvan ominaisuuksia huomattavien harmaan tason muutosten varalta. Tämä pintakuvio merkitsee kuvan yhden osan loppua ja toisen alkua. Se vähentää kuvan datan määrää säilyttäen samalla sen rakenteelliset ominaisuudet.
Esimerkiksi sormenjälkiä tunnistettaessa kuvan esikäsittely reunantunnistuksella on hyödyllistä. Tässä esimerkissä “reunat” ovat sormenjäljen ääriviivat, toisin kuin tausta, jolle sormenjälki tuotettiin. Tämä vähentää melua, jolloin kone voi keskittyä vain sormenjäljen ääriviivoihin.
Etsitkö täydellistä arkistoa tietotieteessä käytettävistä Python-kirjastoista, katso tästä.
Erilaisia tekniikoita reunan havaitsemiseen
Reunan havaitseminen voidaan jakaa kahteen osaan, gradienteihin ja Gaussiin.
Gradientit
Kuvan olennaisten paikallisten muutosten tunnistamista kutsutaan reunantunnistukseksi. Askelreuna yhdessä ulottuvuudessa vastaa paikallista huippua ensimmäisessä derivaatassa. Gradientti on funktion muutoksen mitta, ja kuvaa voidaan pitää sarjana näytteitä kuvan intensiteetin jatkuvasta funktiosta. Gradientin diskreetillä approksimaatiolla voidaan tunnistaa olennaisia muutoksia kuvan harmaasävyissä. Gradientti määritellään vektoriksi ja on ensimmäisen derivaatan kaksiulotteinen ekvivalentti. Gradientilla on kaksi ratkaisevaa ominaisuutta:
- Vektori osoittaa koordinaattien funktion suurimman nousunopeuden suuntaan.
- Gradientin suuruus on yhtä suuri kuin koordinaattien funktion suurin nousunopeus etäisyysyksikköä kohti vektorin suunnassa.
On kuitenkin tavallista, että gradientin suuruus approksimoidaan käyttämällä absoluuttisia arvoja. Gradientin suunta määritetään vektorianalyysillä x-akselin suhteen mitattuna kulmana. Gradientin koko on riippumaton reunan suunnasta. Nämä tunnetaan isotrooppisina operaattoreina. Ensimmäisen derivaatan johtamiseen käytetään kolmea operaattoria, jotka ovat Sobel-operaattori, Prewitt-operaattori ja Robert-operaattori.
- Robertin ristioperaattori approksimoi gradientin suuruuden yksinkertaisesti. Se on gradienttioperaattori, jossa on 2×2 matriisi. Interpoloitua pistettä käytetään erojen laskemiseen. Roberts-operaattori approksimoi jatkuvaa gradienttia tässä pisteessä eikä pisteessä.
- Gradientin suuruutta edustaa Sobel-operaattori. 3 x 3 -ympäristön käyttäminen gradienttilaskutoimiin välttää gradientin laskemisen pikselien välisen interpoloidun pisteen ympärillä. Mieti, kuinka pikselit on järjestetty pikselin ympärille. Tämä operaattori korostaa pikseleitä, jotka ovat lähinnä maskin keskustaa. Yksi yleisimmistä reunantunnistimista on Sobel-operaattori.
- Prewitt-operaattori käyttää identtisiä yhtälöitä kuin Sobel-operaattori, paitsi että vakio on yksi. Tämä operaattori, toisin kuin Sobel-operaattori, ei aseta tarkennusta pikseleihin kohti maskien keskustaa.
Gaussialaiset
Aiemmin mainitut reunatunnistimet laskivat ensimmäisen derivaatan ja olettivat reunapisteen olemassaolon, jos se oli suurempi kuin tietty kynnys. Tämän seurauksena havaitaan liian suuri määrä reunapisteitä. Parempi strategia olisi löytää ja tutkia vain paikat, joilla on paikallinen maksimi gradienttiarvoissa.
Tämä tarkoittaa, että reunapisteissä ensimmäisellä derivaatalla on huippu ja toisella derivaatalla on nollan ylitys. Reunapisteet voidaan siten tunnistaa paikantamalla kuvan intensiteetin toisen derivaatan nollapisteet. Toista derivaatta edustaa kaksi kaksiulotteista operaattoria: Gaussin Laplacian ja Cannyn reunadetektori.
- Canny-reunadetektori on Gaussin ensimmäinen derivaatta, joka lähentää läheisesti signaali-kohinasuhteen ja lokalisoinnin tuloa optimoivaa operaattoria. Erotettavan suodatuksen käyttäminen kuvan konvolvoimiseksi Gaussin tasoitussuodattimella on joukko tasoitettuja tietoja. Käyttämällä 2 x 2 ensimmäisen eron approksimaatioita voidaan määrittää tasoitetun taulukon gradientti, jolloin saadaan kaksi taulukkoa osittaisille derivaatoille.
Äärilliset erot lasketaan keskiarvoina 2 x 2 neliön osittaisten derivaattojen laskemiseksi samassa kuvan kohdassa. Gradientin suuruus ja suunta voidaan laskea käyttämällä tyypillisiä kaavoja suorakulmaisesta napamuunnokselle, jossa arctan-funktio ottaa kaksi tuloa ja muodostaa kulman mahdollisten suuntien koko ympyrän yli.
- Marr- ja Hildrethin hattua käytetään Gaussin suodatuksen kanssa Gaussin Laplacian saamiseksi. Sitä käytetään melun poistamiseen ennen reunan parantamista. Reunapisteet, jotka on löydetty paikantamalla kuvan intensiteetin toisen derivaatan nollaristeyksiä, ovat erittäin herkkiä kohinalle. Tässä menetelmässä kuva tulee konvoloida Gauss-suodattimella.
Tämä vaihe tasoittaa ja vähentää kohinaa kuvassa. Pienet rakenteet ja erilliset melupisteet suodatetaan pois. Koska tasoitus aiheuttaa reunan leviämisen, reunantunnistin pitää reunoina vain pikseleitä, joilla on paikallisesti suurin gradientti. Tämä saavutetaan käyttämällä toisen derivaatan nollan ylityksiä. Koska se on isotrooppinen operaattori, Laplaciaa käytetään toisen derivaatan approksimoimiseen kaksiulotteisesti. Triviaalireunojen havaitsemisen estämiseksi reunapaikoiksi valitaan vain nollan ylitykset, joiden ensimmäiset derivaatat ovat suurempia kuin tietty kynnys.
Kuinka reunantunnistus toimii?
Reuna on viiva, joka yhdistää kaksi kulmaa tai pintaa matematiikassa. Reunojen havaitsemisen taustalla oleva perusajatus on, että alueet, joilla on suuria pikselien kirkkausvaihteluita, viittaavat reunaan. Tämän seurauksena reunantunnistus on kuvan intensiteetin epäjatkuvuuden mitta. Reunantunnistusalgoritmeissa on kolme vaihetta.
Suodatus
Koska vain kahden paikan intensiteettiarvoihin perustuva gradienttilaskenta on alttiina kohinalle ja muille epäselvyyksille diskreetissä laskennassa, suodatusta käytetään tyypillisesti parantamaan reunailmaisimen kohinan suorituskykyä. Reunojen lujuuteen ja melun vähentämiseen liittyy kuitenkin kustannuksia. Lisää suodatusta melun poistamiseksi vähentää reunan lujuutta.
Tehostaminen
On tärkeää arvioida intensiteetin vaihtelut pisteen läheisyydessä reunan tunnistamisen mahdollistamiseksi. Parannus korostaa pikseleitä, joilla on suuri muutos paikallisissa intensiteettiarvoissa, ja se saavutetaan usein määrittämällä gradientin suuruus.
Havaitseminen
Pisteet, joilla on selkeä reuna, ovat algoritmin prioriteetti. Monilla kuvan paikoilla on kuitenkin nollasta poikkeavat gradienttiarvot, eivätkä kaikki nämä pisteet ole tietyn sovelluksen reunoja. Tämän seurauksena tulisi käyttää menetelmää sen määrittämiseksi, mitkä pisteet ovat reunapisteitä. Kynnysarvoa käytetään usein havaitsemiskriteerinä.
Jotkut algoritmit käyttävät neljättä vaihetta, joka on lokalisointi
Lokalisointi
Jos alipikseliresoluutio on tarpeen sovellukselle, voidaan päätellä reunan sijainti. Reunan suunta voidaan myös arvioida.
On tärkeää muistaa, että tunnistus osoittaa vain reunan olemassaolon kuvan pikselin lähellä, eikä se aina tarjoa tarkkaa arviota reunan sijainnista tai suunnasta. Reunan havaitsemisvirheet ovat luokitteluvirheitä; väärät reunat ja puuttuvat reunat. Reunan estimointivirheiden kuvaamiseen käytetään todennäköisyysjakaumia sijainti- ja suuntaestimaateille. Koska molemmat prosessit suoritetaan erillisillä algoritmeilla ja niillä on erilaiset virhemallit, erotamme reunan havaitsemisen ja arvioinnin.
Opi reunantunnistus OpenCV:llä
Aloitetaan tuomalla tarvittavat kirjastot, joita käytetään artikkelin jokaisessa osassa.
import cv2 tuonti matplotlib.pyplot as plt tuonti numpy as np
Lue kuva ja esikäsittely
alkuperäinen_img = cv2.imread(‘Taj_mahal_hotel.jpg’,cv2.IMREAD_COLOR) harmaa = cv2.cvtColor(original_img, cv2.COLOR_BGR2GRAY) blur_img = cv2.GaussianBlur(grey,(3,3),0)
Kuvan muuntaminen harmaasävyiksi on välttämätöntä, koska reunantunnistusoperaattori toimii harmaasävyllä. Gaussin epäterävyyttä käytetään vähentämään kuvan kohinaa, mikä on tärkeä esikäsittelyvaihe.
Kyselykuvan piirtäminen muunnoksen jälkeen.
plt.figure(figsize=(10,10)) plt.imshow(blur_img) plt.title(“Muunnettu harmaasävyiksi”) plt.show()

Sobel reunan tunnistin
Tässä otamme kolme eri skenaariota vertaillaksemme X-akselin, Y-akselin ja XY-akselin reunan havaitsemista.
sobelx = cv2.Sobel(src=blur_img, ddepth=cv2.CV_64F, dx=1, dy=0, ksize=5) filtered_image_x = cv2.convertScaleAbs(sobelx) sobely = cv2.Sobel(sobel(ssrc=cdddep.) CV_64F, dx=0, dy=1, ksize=5) filtered_image_y = cv2.convertScaleAbs(sobely) sobelxy = cv2.Sobel(src=blur_img, ddepth=cv2.CV_64F, dx=1, ksize=1) filtered_image_xy = cv2.convertScaleAbs(sobelxy) plt.figure(figsize=(18,19)) plt.subplot(221) plt.imshow(blur_img, cmap=’grey’) plt.title(‘Alkuperäinen’) plt.axis( “off”) plt.subplot(222) plt.imshow(filtered_image_x, cmap=’grey’) plt.title(‘Sobel X’) plt.axis(“off”) plt.subplot(223) plt.imshow(filtered_image_y , cmap=’grey’) plt.title(‘Sobel Y’) plt.axis(“off”) plt.subplot(224) plt.imshow(filtered_image_xy, cmap=’grey’) plt.title(‘Sobel X Y ‘) plt.axis(“off”) plt.show()

Kumpikaan yksisuuntainen reunantunnistus ei pystynyt havaitsemaan reunoja. Mutta kaksisuuntainen reunantunnistus oli tehnyt melko hyvää työtä kuvan kohteiden reunojen havaitsemisessa.
Näppärä reunan tunnistin
Menetelmässä kuvasta poistetaan reunat kolmivaiheisella menettelyllä, ja sumennusta käytettäessä prosessissa on yhteensä neljä vaihetta.
reunat = cv2.Canny(kuva=sumennus_kuva, kynnys1=100, kynnys2=200) plt.figure(figsize=(18,19)) plt.subplot(121) plt.imshow(blur_img, cmap=’grey’) plt. title(‘Alkuperäinen’) plt.axis(“off”) plt.subplot(122) plt.imshow(edges, cmap=’grey’) plt.title(‘Edge image’) plt.axis(“off”) plt .näytä()

Laplacian reunatunnistin
Laplacian reunatunnistin vertaa kuvan toisia derivaattoja. Se laskee, kuinka monta kertaa ensimmäinen derivaatta muuttuu yhdellä kertaa.
laplacian = cv2.Laplacian(blur_img,5,cv2.CV_64F) filtered_image = cv2.convertScaleAbs(laplacian) plt.figure(figsize=(18,19)) plt.subplot(121) plt.imshow(blur=’img, cma ‘) plt.title(‘Alkuperäinen’) plt.axis(“off”) plt.subplot(122) plt.imshow(filtered_image, cmap=’grey’) plt.title(‘Reunakuva’) plt.axis(” pois”) plt.show()

Vertaamalla kaikkia kolmea menetelmää tulosten mukaan, Canny-reunatunnistin onnistui melko hyvin havaitsemaan esineiden reunat.
Johtopäätökset
Digitaalisessa kuvassa reunat ovat suuria paikallisia intensiteetin vaihteluita. Reuna on kokoelma linkitettyjä pikseleitä, jotka määrittelevät kahden erillisen alueen välisen rajan. Tämän artikkelin avulla olemme ymmärtäneet reunantunnistuksen käsitteen ja toiminnan OpenCV:tä käyttävän toteutuksen kanssa.