Hoppa till innehåll

Archives

  • januari 2022
  • december 2021
  • november 2021
  • oktober 2021
  • september 2021

Categories

  • Inga kategorier
Trend RepositoryArticles and guides
Articles

OpenCV Threshold ( Python , C++ )

On januari 4, 2022 by admin
  • Vad är tröskelbehandling av bilder?
  • Threshold Examples: C++ och Python
  • Inverted Threshold to Zero ( type = THRESH_TOZERO_INV)
  • Ladda ner kod och exempelbild

Vad är tröskelbehandling av bilder?

Observera noga animationen nedan (Figur 1). Hur många siffror ser du? De flesta av er kommer att se siffrorna: 32 (ja, titta noga), 64, 100, 128, 180, 200 och 255. Men det finns mer i bilden än vad som möter ögat.

Om en sekund kan du se den tröskelvärderade versionen av originalbilden. Du kommer att märka att alla siffror ser helt vita ut ( dvs. de har ett gråskalavärde på 255 ) och att det finns en extra siffra 5. Du lade inte märke till siffran 5 i originalbilden eftersom dess gråskalavärde var, ja, 5. I själva verket har alla siffror i originalbilden ett gråskalavärde som är lika stort som siffran. Därför är 255 det ljusaste och 5 det mörkaste.

Läsning av siffror i den trösklade bilden är mycket lättare än att läsa siffror i originalbilden. Inte överraskande kommer en algoritm för textigenkänning att tycka att den trösklade bilden i vårt exempel är mycket lättare att bearbeta än originalbilden.

Detta inlägg har testats på OpenCV 4.4.

I Computer Vision när man gör en uppgift lättare för människor gör man den vanligtvis också lättare för datoralgoritmer.

Alla tröskelalgoritmer tar en källbild (src) och ett tröskelvärde (thresh) som indata och producerar en utgångsbild (dst) genom att jämföra pixelvärdet vid källpixeln ( x , y ) med tröskelvärdet. Om src ( x , y ) > thresh , tilldelas dst ( x , y ) ett visst värde. I annat fall tilldelas dst ( x , y ) något annat värde.

Den enklaste formen av tröskelvärdering kallas binär tröskelvärdering. Förutom källbilden (src) och tröskelvärdet (thresh) tar den ytterligare en ingångsparameter som kallas maximalt värde ( maxValue ). Vid varje pixelposition (x,y) jämförs pixelvärdet src ( x , y ) med thresh. Om src ( x , y ) är större än tröskelvärdet, sätts värdet för målbildens pixel dst ( x , y ) till maxValue. I annat fall sätts värdet till noll. Så här ser pseudokoden ut.

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

Mer generellt finns det många typer av tröskelvärdering som bygger på olika tröskelregler som tillämpas på src ( x , y ) för att få fram dst ( x , y ). Låt oss titta på de olika tröskeltyperna som finns tillgängliga i OpenCV.

Threshold Examples: C++ och Python

Om du har bråttom kan du hoppa till nedladdningsavsnittet för att få kod och exempelbild.

Input Image

I följande exempel kommer vi att använda denna bild som input. Klicka på figur 2 för att ladda ner bilden i PNG-format. Ingångsbilden innehåller siffror skrivna med intensitet ( gråskalavärde ) som är lika med själva siffran. Exempelvis är pixelvärdet för talet 200 200, och pixelvärdet för 32 är 32. Det är därför som 32 verkar mycket mörkare än 200 i bilden.

Figur 2: Ingångsbild. Klicka för att öppna en högupplöst PNG i ett annat fönster

I varje exempel kommer vi att förklara tröskelregeln med hjälp av en pseudokod, ge C++- och pythonexempel samt den tröskelbehandlade utdatabilden.

Binary Thresholding ( type = THRESH_BINARY )

Det här är den vanligaste och enklaste typen av tröskelbehandling.

Tröskelregel

# 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 av binär tröskel

Figur 3 visar resultatet av att applicera binär tröskel på den inkommande bilden med thresh = 0 och maxValue = 255.

Figur 3 : Binärt tröskelvärde ( thresh = 0 och maxValue = 255)

Om thresh ändras till 127 tas alla tal som är mindre än eller lika med 127 bort.

Figur 4 : Binärt tröskelvärde ( thresh = 127 och maxValue = 255)

Om maxValue ändras till 128 sätts värdet för de trösklade områdena till 128.

Figur 5: Binärt tröskelvärde med maxValue satt till 128

Invers binärt tröskelvärde ( typ = THRESH_BINARY_INV )

Invers binärt tröskelvärde är raka motsatsen till binärt tröskelvärde. Målpixeln sätts till noll om motsvarande källpixel är större än tröskelvärdet och till maxValue om källpixeln är mindre än tröskelvärdet.

Tröskelregel

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

Resultatet av omvänd binär tröskel

Bemärk att resultatet av omvänd binär tröskel som visas i figur 6 är exakt det omvända av figur 4.

Figur 6 : Invers binär tröskling ( thresh = 127, maxValue = 0 )

Truncate Thresholding ( type = THRESH_TRUNC )

I den här typen av tröskling sätts målpixeln till tröskelvärdet ( thresh ) om värdet på källpixeln är större än tröskeln. I annat fall sätts den till källpixelvärdet. maxValue ignoreras.

Tröskelregel

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

Resultatet av Truncate Thresholding

Figur 7 visar resultatet av att tillämpa Truncate Thresholding på den ingående bilden. Observera att alla värden över tröskelvärdet ( 127 ) sätts till 127, och alla värden mindre än eller lika med 127 är oförändrade. maxValue ignoreras.

Figur 7 : Truncate thresholding (thresh = 127)

Threshold to Zero ( type = THRESH_TOZERO )

I den här typen av tröskling sätts målpixelns värde till motsvarande källapixelns värde om källpixelns värde är större än tröskeln. I annat fall sätts det till noll. maxValue ignoreras.

Tröskelregel

# 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 av tröskel till noll

Figur 8: Threshold to Zero ( thresh = 127 )

Inverted Threshold to Zero ( type = THRESH_TOZERO_INV)

I denna typ av tröskling sätts målpixelvärdet till noll om källpixelvärdet är större än tröskelvärdet. I annat fall sätts det till källpixelvärdet. maxValue ignoreras.

Tröskelregel

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

Resultatet av inverterat tröskelvärde till noll

Figur 9 visar resultatet av att tillämpa inverterat tröskelvärde till noll på den ingående bilden. Siffrorna under tröskelvärdet behåller sitt gråskalavärde, och siffrorna över tröskelvärdet är 0 med undantag för gränsen. Artefakterna vid gränsen beror på att pixelvärdena vid gränsen övergår från 0 till talets värde över några få pixlar. Så en del av gränspixlarna ligger under tröskelvärdet.

Figur 9: Inverterat tröskelvärde till noll ( thresh = 127 )

Ladda ner kod och exempelbild

.

Lämna ett svar Avbryt svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Arkiv

  • januari 2022
  • december 2021
  • november 2021
  • oktober 2021
  • september 2021

Meta

  • Logga in
  • Flöde för inlägg
  • Flöde för kommentarer
  • 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
  • 日本語日本語

Upphovsrätt Trend Repository 2022 | Tema av ThemeinProgress | Drivs med WordPress