Skip to content

Archives

  • januar 2022
  • december 2021
  • november 2021
  • oktober 2021
  • september 2021

Categories

  • Ingen kategorier
Trend RepositoryArticles and guides
Articles

OpenCV Threshold ( Python , C++ )

On januar 4, 2022 by admin

Hvad er billedets tærskelværdi?

Se nøje på animationen nedenfor (Figur 1). Hvor mange tal kan du se? De fleste af jer vil se tallene: 32 (åh ja, se godt efter), 64, 100, 128, 180, 200 og 255. Men der er mere i billedet, end hvad der møder øjet.

I et sekund kan du se den tærskelværdiberigtigede version af det originale billede. Du vil bemærke, at alle tallene ser helt hvide ud ( dvs. de har en gråskala-værdi på 255 ), og der er et ekstra tal 5. Du lagde ikke mærke til tallet 5 i det oprindelige billede, fordi dets gråskalaværdi var, ja, 5. Faktisk har alle tallene i det oprindelige billede en gråskalaværdi, der svarer til tallet. Derfor er 255 det lyseste og 5 det mørkeste.

Læsning af tal i det tærskeljusterede billede er meget nemmere end læsning af tal i det originale billede. Det er ikke overraskende, at en algoritme til tekstgenkendelse vil finde det tærskeljusterede billede i vores eksempel meget nemmere at behandle end det originale billede.

Dette indlæg er blevet testet på OpenCV 4.4.

I Computer Vision når man gør en opgave nemmere for mennesker, gør man den typisk også nemmere for computeralgoritmer.

Alle tærskelalgoritmer tager et kildebillede (src) og en tærskelværdi (thresh) som input og producerer et outputbillede (dst) ved at sammenligne pixelværdien på kildepixel ( x , y ) med tærskelværdien. Hvis src ( x , y ) > tærskel , så tildeles dst ( x , y ) en vis værdi. Ellers tildeles dst ( x , y ) en anden værdi.

Den enkleste form for tærskelværdiberegning kaldes binær tærskelværdiberegning. Ud over kildebilledet (src) og tærskelværdien (thresh) tager den en anden indgangsparameter, der hedder maksimalværdi ( maxValue ). Ved hver pixelplacering (x,y) sammenligner den pixelværdien src ( x , y ) med tærsk. Hvis src ( x , y ) er større end tærskelværdien, sættes værdien af destinationsbilledets pixel dst ( x , y ) til maxValue. Ellers sættes den til nul. Her er, hvordan pseudokoden ser ud.

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

Mere generelt er der mange typer af tærskelværdier baseret på forskellige tærskelregler, der anvendes på src ( x , y ) for at få dst ( x , y ). Lad os se på de forskellige tærskeltyper, der er tilgængelige i OpenCV.

Tærskel Eksempler: C++ og Python

Hvis du har travlt, kan du springe til download-sektionen for at få kode og eksempelbillede.

Inputbillede

I de følgende eksempler vil vi bruge dette billede som input. Klik på figur 2 for at downloade billedet i PNG-format. Indtastningsbilledet indeholder tal skrevet med intensitet ( gråskalaværdi ) svarende til selve tallet. F.eks. er pixelværdien for tallet 200 200 er 200, og pixelværdien for 32 er 32. Derfor fremstår 32 meget mørkere end 200 i billedet.

Figur 2: Indtastningsbillede. Klik for at åbne en PNG-fil i høj opløsning i et andet vindue

I hvert eksempel vil vi forklare tærskelreglen via en pseudokode, give C++- og python-eksempel og det tærskelberigede udgangsbillede.

Binary Thresholding ( type = THRESH_BINARY )

Dette er den mest almindelige og enkleste type tærskelberegning.

Tærskelregel

# 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);

Resultat af binær tærskel

Figur 3 viser resultatet af anvendelse af binær tærskel på indgangsbilledet med tærskel = 0 og maxValue = 255.

Figur 3 : Binær tærskelværdi ( thresh = 0 og maxValue = 255)

Hvis man ændrer thresh til 127, fjernes alle tal, der er mindre end eller lig med 127.

Figur 4 : Binær tærskel ( tærskel = 127 og maxVærdi = 255)

Hvis man ændrer maxVærdi til 128, sættes værdien af de tærskelbelagte områder til 128.

Figur 5: Binær tærskel med maxValue sat til 128

Invers binær tærskel ( type = THRESH_BINARY_INV )

Invers binær tærskel er lige det modsatte af binær tærskel. Destinationspixlen sættes til nul, hvis den tilsvarende kildepixel er større end tærskelværdien, og til maxValue, hvis kildepixlen er mindre end tærskelværdien.

Tærskelregel

# Inverse Binary Thresholdif src(x,y) > thresh dst(x,y) = 0else dst(x,y) = maxValue

Python

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

C++

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

Resultat af omvendt binær tærskel

Bemærk, at resultatet af omvendt binær tærskel, der er vist i figur 6, er præcis det omvendte af figur 4.

Figur 6 : Invers binær tærskelværdi ( thresh = 127, maxValue = 0 )

Truncate Thresholding ( type = THRESH_TRUNC )

I denne type tærskelværdiindstilling sættes destinationspixlen til tærskelværdien ( thresh ), hvis kildepixelværdien er større end tærskelværdien. I modsat fald sættes den til kildepixelværdien. maxValue ignoreres.

Tærskelregel

# 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);

Resultat af Truncate Thresholding

Figur 7 viser resultatet af anvendelse af Truncate Thresholding på indgangsbilledet. Bemærk, at alle værdier over tærskelværdien ( 127 ) sættes til 127, og at alle værdier mindre end eller lig med 127 er uændrede. maxValue ignoreres.

Figur 7 : Truncate tærskelværdi (tærskel = 127)

Tærskel til nul ( type = THRESH_TOZERO )

I denne form for tærskelværdiindstilling sættes destinationspixelværdien til den tilsvarende kildepixelværdi, hvis kildepixelværdien er større end tærskelværdien. I modsat fald sættes den til nul. maxValue ignoreres.

Tærskelregel

# 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);

Resultat af tærskelværdi til nul

Figur 8: Tærskel til nul ( thresh = 127 )

Inverteret tærskel til nul ( type = THRESH_TOZERO_INV)

I denne form for tærskelværdifastsættelse sættes destinationspixelværdien til nul, hvis kildepixelværdien er større end tærskelværdien. Ellers sættes den til kildepixelværdien. maxValue ignoreres.

Tærskelregel

# 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);

Resultat af Inverted Threshold to Zero

Figur 9 viser resultatet af at anvende Inverted Threshold to Zero på indgangsbilledet. Tallene under tærsklen beholder deres gråskalaværdi, og tallene over tærsklen er 0 med undtagelse af grænsen. Artefakterne ved grænsen skyldes, at pixelværdierne ved grænsen overgår fra 0 til værdien af tallet over nogle få pixels. Så nogle af grænsepixlerne ligger under tærskelværdien.

Figur 9: Inverteret tærskelværdi til nul ( tærskelværdi = 127 )

Download kode og eksempelbillede

Skriv et svar Annuller svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

Arkiver

  • januar 2022
  • december 2021
  • november 2021
  • oktober 2021
  • september 2021

Meta

  • Log ind
  • Indlægsfeed
  • Kommentarfeed
  • 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