Skip to content

Archives

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

Categories

  • Geen categorieën
Trend RepositoryArticles and guides
Articles

OpenCV Threshold ( Python , C++ )

On januari 4, 2022 by admin
  • Wat is het dorsen van afbeeldingen?
  • Drempel voorbeelden: C++ en Python
  • Input Image
  • Binaire dorsen ( type = THRESH_BINARY )
  • Invers binair dorsen ( type = THRESH_BINARY_INV )
  • Truncate Thresholding ( type = THRESH_TRUNC )
  • Threshold to Zero ( type = THRESH_TOZERO )
  • Inverted Threshold to Zero ( type = THRESH_TOZERO_INV)
  • Download code en voorbeeldafbeelding

Wat is het dorsen van afbeeldingen?

Kijk aandachtig naar de onderstaande animatie (figuur 1). Hoeveel getallen zie je? De meesten van jullie zullen de getallen zien: 32 (o ja, kijk goed), 64, 100, 128, 180, 200 en 255. Maar er is meer aan de hand dan wat je op het eerste gezicht zou zeggen.

In een seconde zie je de gedrempelde versie van het originele beeld. U zult zien dat alle getallen er volledig wit uitzien ( d.w.z. ze hebben een grijswaarde van 255 ) en dat er een extra getal 5 is. Het getal 5 was u niet opgevallen in de originele afbeelding omdat de grijswaarde ervan, nou ja, 5 was. In feite hebben alle getallen in de originele afbeelding een grijswaarde gelijk aan het getal. Daarom is 255 het helderst en 5 het donkerst.

Het lezen van getallen in de gedrempelde afbeelding is veel gemakkelijker dan het lezen van getallen in de originele afbeelding. Het is dan ook geen verrassing dat een tekstherkenningsalgoritme de gedrempelde afbeelding in ons voorbeeld veel gemakkelijker zal vinden om te verwerken dan de originele afbeelding.

Dit bericht is getest op OpenCV 4.4.

In Computer Vision geldt dat wanneer je een taak gemakkelijker maakt voor mensen, je hem doorgaans ook gemakkelijker maakt voor computeralgoritmen.

Alle dresholding-algoritmen nemen een bronafbeelding (src) en een drempelwaarde (thresh) als invoer en produceren een uitvoerafbeelding (dst) door de pixelwaarde op bronpixel ( x , y ) te vergelijken met de drempelwaarde. Indien src ( x , y ) > dresh , dan wordt aan dst ( x , y ) een waarde toegekend. Anders wordt aan dst ( x , y ) een andere waarde toegekend.

De eenvoudigste vorm van thresholding wordt Binary Thresholding genoemd. Naast de bronafbeelding (src) en de drempelwaarde (thresh), neemt het een andere invoerparameter genaamd maximumwaarde ( maxValue ). Op elke pixelplaats (x,y) vergelijkt het de pixelwaarde src ( x , y ) met thresh. Als src ( x , y ) groter is dan thresh, stelt het de waarde van de bestemmingsbeeld pixel dst ( x , y ) in op maxValue. Zo niet, dan wordt de waarde op nul gezet. Hier is hoe de pseudo-code eruit ziet.

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

Meer in het algemeen, er zijn vele soorten van thresholding gebaseerd op verschillende drempel regels toegepast op src ( x , y ) om dst ( x , y ) te krijgen. Laten we eens kijken naar de verschillende drempel types die beschikbaar zijn in OpenCV.

Drempel voorbeelden: C++ en Python

Als u haast heeft, spring dan naar de download sectie om code en voorbeeld afbeelding te krijgen.

Input Image

In de volgende voorbeelden, zullen we deze afbeelding als input gebruiken. Klik op afbeelding 2 om de afbeelding in PNG-formaat te downloaden. De input afbeelding bevat getallen geschreven met intensiteit ( grijswaarde ) gelijk aan het getal zelf. Bv. de pixelwaarde van het getal 200 is 200, en die van 32 is 32. Daarom lijkt 32 veel donkerder dan 200 in het beeld.

Figuur 2: Invoerbeeld. Klik om een hoge-resolutie PNG in een ander venster te openen

In elk voorbeeld zullen we de regel van het dorsen uitleggen via een pseudo-code, een C++ en python voorbeeld geven, en het gedrempelde uitgangsbeeld.

Binaire dorsen ( type = THRESH_BINARY )

Dit is de meest voorkomende en eenvoudigste vorm van dorsen.

Thresholding rule

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

Resultaat van Binary Threshold

Figuur 3 toont het resultaat van het toepassen van binair thresholding op de invoerafbeelding met thresh = 0 en maxValue = 255.

Figuur 3 : Binaire drempel ( thresh = 0 en maxValue = 255)

Wanneer u thresh wijzigt in 127, worden alle getallen kleiner dan of gelijk aan 127 verwijderd.

Figuur 4 : Binaire drempel ( thresh = 127 en maxValue = 255)

Wanneer u maxValue wijzigt in 128, wordt de waarde van de regio’s met drempelwaarde ingesteld op 128.

Figuur 5: Binaire drempel met maxValue ingesteld op 128

Invers binair dorsen ( type = THRESH_BINARY_INV )

Invers binair dorsen is precies het tegenovergestelde van binair dorsen. De bestemmingspixel wordt op nul gezet als de overeenkomstige bronpixel groter is dan de drempelwaarde, en op maxValue, als de bronpixel kleiner is dan de drempelwaarde.

Thresholding rule

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

Resultaat van Inverse Binary Threshold

Merk op dat het resultaat van inverse binaire thresholding dat in figuur 6 wordt getoond, precies het omgekeerde is van figuur 4.

Figuur 6 : Inverse Binary Thresholding ( thresh = 127, maxValue = 0 )

Truncate Thresholding ( type = THRESH_TRUNC )

Bij dit type thresholding wordt de bestemmingspixel ingesteld op de drempelwaarde ( thresh ) als de waarde van de bronpixel groter is dan de drempelwaarde. Anders wordt het ingesteld op de waarde van de bronpixel. maxValue wordt genegeerd.

Thresholding rule

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

Resultaat van Truncate Thresholding

Figuur 7 toont het resultaat van het toepassen van Truncate Thresholding op de invoerafbeelding. Merk op dat alle waarden boven de drempel ( 127 ) worden ingesteld op 127, en dat alle waarden kleiner dan of gelijk aan 127 ongewijzigd blijven. maxValue wordt genegeerd.

Figuur 7 : Truncate thresholding (thresh = 127)

Threshold to Zero ( type = THRESH_TOZERO )

Bij deze vorm van thresholding wordt de waarde van de bestemmingspixel ingesteld op de overeenkomstige waarde van de bronpixel als de waarde van de bronpixel groter is dan de drempelwaarde. Zo niet, dan wordt de waarde op nul gezet. maxValue wordt genegeerd.

Thresholding regel

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

Resultaat van Threshold to Zero

Figuur 8: Threshold to Zero ( thresh = 127 )

Inverted Threshold to Zero ( type = THRESH_TOZERO_INV)

Bij deze vorm van thresholding wordt de waarde van de doelpixel op nul gesteld als de waarde van de bronpixel hoger is dan de drempelwaarde. Anders wordt de waarde ingesteld op de pixelwaarde van de bron. maxValue wordt genegeerd.

Thresholding rule

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

Resultaat van Inverted Threshold to Zero

Figuur 9 toont het resultaat van het toepassen van Inverted Threshold to Zero op de invoerafbeelding. De getallen onder de drempel behouden hun grijswaarde, en de getallen boven de drempel zijn 0 behalve voor de grens. De artefacten op de grens zijn te wijten aan het feit dat de pixelwaarden op de grens overgaan van 0 naar de waarde van het getal over een paar pixels. Sommige grenspixels liggen dus onder de drempel.

Figuur 9: Omgekeerde drempel naar nul ( drempel = 127 )

Download code en voorbeeldafbeelding

Geef een antwoord Antwoord annuleren

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Archieven

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

Meta

  • Inloggen
  • Berichten feed
  • Reacties feed
  • 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