Skip to content

Archives

  • tammikuu 2022
  • joulukuu 2021
  • marraskuu 2021
  • lokakuu 2021
  • syyskuu 2021

Categories

  • Ei kategorioita
Trend RepositoryArticles and guides
Articles

OpenCV Threshold ( Python , C++ )

On 4 tammikuun, 2022 by admin
  • Mitä on kuvan kynnystäminen?
  • Kynnys Esimerkkejä: C++ ja Python
  • Syöttökuva
  • Binäärinen kynnyskorjaus ( type = THRESH_BINARY )
  • Käänteinen binäärinen kynnysarvo ( type = THRESH_BINARY_INV )
  • Trunssi-kynnys ( type = THRESH_TRUNC )
  • Threshold to Zero ( type = THRESH_TOZERO )
  • Käänteinen kynnysarvo nollaan ( type = THRESH_TOZERO_INV)
  • Latauskoodi ja esimerkkikuva

Mitä on kuvan kynnystäminen?

Katsele huolellisesti alla olevaa animaatiota (kuva 1). Kuinka monta numeroa näet? Suurin osa teistä näkee numeroita: 32 (ai niin, katso tarkkaan), 64, 100, 128, 180, 200 ja 255. Kuvassa on kuitenkin muutakin kuin mitä silmä näkee.

Sekunnissa näet alkuperäisen kuvan kynnysarvotetun version. Huomaat, että kaikki numerot näyttävät täysin valkoisilta ( eli niiden harmaasävyarvo on 255 ) ja niissä on ylimääräinen numero 5. Et huomannut numeroa 5 alkuperäisessä kuvassa, koska sen harmaasävyarvo oli, no, 5. Itse asiassa kaikilla alkuperäisen kuvan numeroilla on sama harmaasävyarvo kuin numerolla 5. Näin ollen 255 on kirkkain ja 5 on tummin.

Numeroiden lukeminen kynnyskorjatusta kuvasta on paljon helpompaa kuin numeroiden lukeminen alkuperäisestä kuvasta. Ei ole yllättävää, että tekstintunnistusalgoritmi pitää esimerkkimme kynnystettyä kuvaa paljon helpompana käsitellä kuin alkuperäistä kuvaa.

Tämä viesti on testattu OpenCV 4.4:llä.

Tietokonenäköalalla kun teet tehtävästä helpomman ihmisille, teet siitä yleensä helpomman myös tietokonealgoritmeille.

Kaikki kynnysalgoritmit ottavat syötteenä lähdekuvan (src) ja kynnysarvon (thresh) ja tuottavat lähtökuvan (dst) vertaamalla lähdepikselin ( x , y ) pikseliarvoa kynnysarvoon. Jos src ( x , y ) > thresh , dst ( x , y ) saa jonkin arvon. Muussa tapauksessa dst ( x , y ) saa jonkin muun arvon.

Yksinkertaisinta kynnysarvon määritystä kutsutaan binääriseksi kynnysarvoksi. Se ottaa lähdekuvan (src) ja kynnysarvon (thresh) lisäksi toisen syöttöparametrin nimeltä maksimiarvo ( maxValue ). Jokaisessa pikselipaikassa (x,y) se vertaa pikselin arvoa src ( x , y ) threshiin. Jos src ( x , y ) on suurempi kuin thres, se asettaa kohdekuvan pikselin dst ( x , y ) arvoksi maxValue. Muussa tapauksessa se asettaa sen arvoksi nolla. Pseudokoodi näyttää seuraavalta.

# Simple threshold function pseudo codeif src(x,y) > thresh dst(x,y) = maxValueelse dst(x,y) = 0

Yleisesti ottaen on olemassa monenlaisia kynnystysmenetelmiä, jotka perustuvat erilaisiin kynnyssääntöihin, joita sovelletaan src ( x , y ) -kuvaan dst ( x , y ) saamiseksi. Katsotaanpa erilaisia OpenCV:ssä käytettävissä olevia kynnystyyppejä.

Kynnys Esimerkkejä: C++ ja Python

Jos sinulla on kiire, hyppää latausosioon saadaksesi koodin ja esimerkkikuvan.

Syöttökuva

Seuraavissa esimerkeissä käytämme tätä kuvaa syötteenä. Lataa kuva PNG-muodossa klikkaamalla kuvaa 2. Syöttökuvassa on numeroita, jotka on kirjoitettu intensiteetillä ( harmaasävyarvo ), joka on yhtä suuri kuin itse numero. Esimerkiksi luvun 200 pikseliarvo on 200 ja luvun 32 arvo on 32. Siksi 32 näkyy kuvassa paljon tummempana kuin 200.

Kuva 2: Syöttökuva. Klikkaa avataksesi korkearesoluutioisen PNG-kuvan toisessa ikkunassa

Kussakin esimerkissä selitämme kynnystyssäännön pseudokoodin avulla, annamme C++- ja python-esimerkin sekä kynnystetyn tulostekuvan.

Binäärinen kynnyskorjaus ( type = THRESH_BINARY )

Tämä on yleisin ja yksinkertaisin kynnyskorjaustyyppi.

Kynnysarvosääntö

# Binary Thresholdif src(x,y) > thresh dst(x,y) = maxValueelse dst(x,y) = 0

Python

# import opencvimport cv2# Read imagesrc = cv2.imread("threshold.png", cv2.IMREAD_GRAYSCALE)# Set threshold and maxValuethresh = 0maxValue = 255 # Basic threshold exampleth, dst = cv2.threshold(src, thresh, maxValue, cv2.THRESH_BINARY);

C++

using namespace cv; // Read imageMat src = imread("threshold.png", IMREAD_GRAYSCALE);Mat dst;// Set threshold and maxValuedouble thresh = 0;double maxValue = 255; // Binary Thresholdthreshold(src,dst, thresh, maxValue, THRESH_BINARY);

Binary Thresholdin tulos

Kuvassa 3 on esitetty tulos, joka saadaan soveltamalla binääristä kynnysarvosäätöä sisääntulokuvaan, jossa thresh = 0 ja maxValue = 255.

Kuva 3 : Binäärinen kynnysarvo ( thresh = 0 ja maxValue = 255)

Muuttamalla thresh arvoksi 127 poistetaan kaikki luvut, jotka ovat pienempiä tai yhtä suuria kuin 127.

Kuva 4 : Binary Threshold ( thresh = 127 ja maxValue = 255)

Muuttamalla maxValue arvoksi 128 asetetaan kynnysalueiden arvoksi 128.

Kuva 5: Binäärinen kynnysarvo, kun maxValue on 128

Käänteinen binäärinen kynnysarvo ( type = THRESH_BINARY_INV )

Käänteinen binäärinen kynnysarvo on juuri binäärisen kynnysarvon vastakohta. Kohdepikseli asetetaan nollaksi, jos vastaava lähdepikseli on suurempi kuin kynnysarvo, ja maxValueeksi, jos lähdepikseli on pienempi kuin kynnysarvo.

Kuvio 6 : Käänteinen binäärikynnys ( thresh = 127, maxValue = 0 )

Trunssi-kynnys ( type = THRESH_TRUNC )

Tämässä kynnysarvotyypissä kohdepikseli asetetaan kynnysarvoon ( thresh ), jos lähdepikselin arvo on kynnysarvoa suurempi. Muussa tapauksessa se asetetaan lähdepikselin arvoon. maxValue jätetään huomiotta.

Kynnysarvosääntö

# Truncate Thresholdif src(x,y) > thresh dst(x,y) = threshelse dst(x,y) = src(x,y)

Python

th, dst = cv2.threshold(src, thresh, maxValue, cv2.THRESH_TRUNC)

C++

threshold(src,dst, thresh, maxValue, THRESH_TRUNC);

Truncate Thresholding -menetelmän tulos

Kuvassa 7 on esitetty tulos, joka saadaan soveltamalla Truncate Thresholding -menetelmää tulokuvaan. Huomaa, että kaikki kynnysarvon ( 127 ) yläpuolella olevat arvot asetetaan arvoon 127 ja kaikki arvot, jotka ovat pienempiä tai yhtä suuria kuin 127, säilyvät ennallaan. maxValue jätetään huomiotta.

Kuva 7 : Truncate thresholding (thresh = 127)

Threshold to Zero ( type = THRESH_TOZERO )

Tässä kynnystyksessä kohdepikselin arvo asetetaan vastaavaan lähdepikselin arvoon, jos lähdepikselin arvo on suurempi kuin kynnys. Muussa tapauksessa se asetetaan nollaksi. maxValue jätetään huomiotta.

Kynnysarvosääntö

# Threshold to Zeroif src(x,y) > thresh dst(x,y) = src(x,y)else dst(x,y) = 0

Python

th, dst = cv2.threshold(src, thresh, maxValue, cv2.THRESH_TOZERO)

C++

threshold(src,dst, thresh, maxValue, THRESH_TOZERO);

Tulos kynnysarvosta nollaan

Kuva 8: Kynnysarvo nollaan ( thresh = 127 )

Käänteinen kynnysarvo nollaan ( type = THRESH_TOZERO_INV)

Tässä kynnystyksessä kohdepikselin arvo asetetaan nollaan, jos lähdepikselin arvo on suurempi kuin kynnysarvo. Muussa tapauksessa se asetetaan lähdepikselin arvoon. maxValue jätetään huomiotta.

Kynnysarvosääntö

# Inverted Threshold to Zeroif src(x,y) > thresh dst(x,y) = 0else dst(x,y) = src(x,y)

Python

th, dst = cv2.threshold(src, thresh, maxValue, cv2.THRESH_TOZERO_INV)

C++

threshold(src,dst, thresh, maxValue, THRESH_TOZERO_INV);

Tulos Inverted Threshold to Zero -menetelmästä

Kuvassa 9 on esitetty tulos, joka saadaan soveltamalla Inverted Threshold to Zero -menetelmää sisääntulotiedostoon. Kynnysarvon alapuolella olevat numerot säilyttävät harmaasävyarvonsa, ja kynnysarvon yläpuolella olevat numerot ovat 0 rajaa lukuun ottamatta. Rajalla olevat artefaktit johtuvat siitä, että rajan pikseliarvot siirtyvät 0:sta numeron arvoon muutamassa pikselissä. Osa rajan pikseleistä on siis kynnysarvon alapuolella.

Kuva 9: Käänteinen kynnysarvo nollaan ( thresh = 127 )

Latauskoodi ja esimerkkikuva

Vastaa Peruuta vastaus

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

Arkistot

  • tammikuu 2022
  • joulukuu 2021
  • marraskuu 2021
  • lokakuu 2021
  • syyskuu 2021

Meta

  • Kirjaudu sisään
  • Sisältösyöte
  • Kommenttisyöte
  • WordPress.org
  • DeutschDeutsch
  • NederlandsNederlands
  • SvenskaSvenska
  • DanskDansk
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • RomânăRomână
  • PolskiPolski
  • ČeštinaČeština
  • MagyarMagyar
  • SuomiSuomi
  • 日本語日本語

Copyright Trend Repository 2022 | Theme by ThemeinProgress | Proudly powered by WordPress