Gekissimo.net - Opi ansaitsemaan rahaa webilläsi Internetissä!

Erilaisia ​​reunantunnistustekniikoita toteutuksella OpenCV:ssä

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

  1. Tietoja reunan tunnistuksesta
  2. Erilaisia ​​tekniikoita reunan havaitsemiseen
  3. Kuinka reunantunnistus toimii?
  4. 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.

Analytics India -lehti

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:

  1. Vektori osoittaa koordinaattien funktion suurimman nousunopeuden suuntaan.
  2. Gradientin suuruus on yhtä suuri kuin koordinaattien funktion suurin nousunopeus etäisyysyksikköä kohti vektorin suunnassa.
🔥 Empfohlen:  Stacey Hartman Mitä uutta verkkosivustoissa ja markkinoinnin verkkokaupassa vuonna 2022 Lue artikkeli

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.
🔥 Empfohlen:  Google-haun päivitykset: Tietoja tästä tekijästä, erilaisia ​​näkemyksiä ja muita

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.

🔥 Empfohlen:  Erilaisia ​​päiväkirjatyylejä

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()

Analytics India -lehti

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()

Analytics India -lehti

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ä()

Analytics India -lehti

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()

Analytics India -lehti

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.

Viitteet