Skip to content

Archives

  • 2022 január
  • 2021 december
  • 2021 november
  • 2021 október
  • 2021 szeptember

Categories

  • Nincs kategória
Trend RepositoryArticles and guides
Articles

OpenCV Threshold ( Python , C++ )

On január 4, 2022 by admin
  • Mi a kép küszöbértékének meghatározása?
  • Küszöbérték példák: C++ és Python
  • Bemeneti kép
  • Bináris küszöbölés ( type = THRESH_BINARY )
  • Inverz bináris küszöbértékelés ( type = THRESH_BINARY_INV )
  • Truncate Thresholding ( type = THRESH_TRUNC )
  • Threshold to Zero ( type = THRESH_TOZERO )
  • Invertált Threshold to Zero ( type = THRESH_TOZERO_INV)
  • Kód és példakép letöltése

Mi a kép küszöbértékének meghatározása?

Nézze meg figyelmesen az alábbi animációt (1. ábra). Hány számot látsz? A legtöbben számokat fognak látni: 32 (ó igen, nézzétek meg figyelmesen), 64, 100, 128, 180, 200 és 255. De több van a képben, mint ami a szemnek látszik.

Egy másodperc múlva láthatjátok az eredeti kép küszöbértékkel csökkentett változatát. Észre fogod venni, hogy az összes szám teljesen fehérnek tűnik ( azaz 255-ös szürkeárnyalatú értékkel rendelkezik ), és van egy plusz 5-ös szám. Az 5-ös számot az eredeti képen nem vetted észre, mert a szürkeárnyalati értéke, nos, 5 volt. Valójában az eredeti képen az összes szám szürkeárnyalati értéke megegyezik a számmal. Ezért a 255 a legvilágosabb, az 5 pedig a legsötétebb.

A számok olvasása a küszöbözött képen sokkal könnyebb, mint az eredeti képen. Nem meglepő módon egy szövegfelismerő algoritmus a példánkban szereplő küszöbözött képet sokkal könnyebben feldolgozhatónak találja, mint az eredeti képet.

Ezt a bejegyzést OpenCV 4.4-en teszteltük.

A számítógépes látásban, ha megkönnyítünk egy feladatot az emberek számára, akkor általában a számítógépes algoritmusok számára is megkönnyítjük azt.

Minden küszöbértékelő algoritmus bemenetként egy forrásképet (src) és egy küszöbértéket (thresh) vesz, és egy kimeneti képet (dst) állít elő a forráspixel ( x , y ) pixelértékének a küszöbértékkel való összehasonlításával. Ha src ( x , y ) > thresh , akkor a dst ( x , y ) valamilyen értéket kap. Ellenkező esetben a dst ( x , y ) valamilyen más értéket kap.

A küszöbölés legegyszerűbb formáját bináris küszöbölésnek nevezzük. A forráskép (src) és a küszöbérték (thresh) mellett egy másik bemeneti paramétert is elfogad, amelyet maximális értéknek ( maxValue ) neveznek. Minden egyes pixelhelyen (x,y) összehasonlítja az src ( x , y ) pixelértéket a thresh értékkel. Ha src ( x , y ) nagyobb, mint a thresh, akkor a célkép pixelének dst ( x , y ) értékét maxValue-ra állítja. Ellenkező esetben nullára állítja azt. Így néz ki az álkód.

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

Többnyire általánosságban a dst ( x , y ) megkapásához az src ( x , y ) képre alkalmazott különböző küszöbszabályokon alapuló küszöbértékek számos típusa létezik. Nézzük meg az OpenCV-ben elérhető különböző küszöbérték típusokat.

Küszöbérték példák: C++ és Python

Ha sietsz, ugorj a letöltés részhez, hogy megkapd a kódot és a példaképet.

Bemeneti kép

A következő példákban ezt a képet fogjuk használni bemenetként. Kattintson a 2. ábrára a kép PNG formátumban történő letöltéséhez. A bemeneti kép olyan számokat tartalmaz, amelyek intenzitása ( szürkeárnyalatos érték ) egyenlő magával a számmal. Például a 200-as szám pixelértéke 200, a 32-esé pedig 32. Ezért a 32 sokkal sötétebbnek tűnik a képen, mint a 200.

2. ábra: Bemeneti kép. Kattintson ide a nagy felbontású PNG kép megnyitásához egy másik ablakban

Minden példában pszeudokódon keresztül magyarázzuk el a küszöbölési szabályt, C++ és python példát adunk, valamint a küszöbölt kimeneti képet.

Bináris küszöbölés ( type = THRESH_BINARY )

Ez a leggyakoribb és legegyszerűbb küszöbtípus.

Küszöbölési szabály

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

A bináris küszöbölés eredménye

A 3. ábra mutatja a bináris küszöbölés alkalmazásának eredményét a bemeneti képre thresh = 0 és maxValue = 255 értékkel.

3. ábra : Bináris küszöbölés ( thresh = 0 és maxValue = 255)

A thresh 127-re történő módosítása minden 127-nél kisebb vagy azzal egyenlő számot eltávolít.

4. ábra : Bináris küszöbérték ( thresh = 127 és maxValue = 255)

A maxValue 128-ra változtatása a küszöbértékkel érintett régiók értékét 128-ra állítja.

5. ábra: Bináris küszöbérték 128-ra állított maxValue-val

Inverz bináris küszöbértékelés ( type = THRESH_BINARY_INV )

A fordított bináris küszöbértékelés éppen a bináris küszöbértékelés ellentéte. A célpixelt nullára állítja, ha a megfelelő forráspixel nagyobb, mint a küszöbérték, és maxValue-ra, ha a forráspixel kisebb, mint a küszöbérték.

Küszöbölési szabály

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

A fordított bináris küszöbölés eredménye

Megjegyezzük, hogy a 6. ábrán látható fordított bináris küszöbölés eredménye pontosan a 4. ábra fordítottja.

6. ábra : Inverz bináris küszöbértékelés ( thresh = 127, maxValue = 0 )

Truncate Thresholding ( type = THRESH_TRUNC )

A küszöbértékelés ezen típusánál a célpixel akkor kerül a küszöbértékre ( thresh ), ha a forráspixel értéke nagyobb a küszöbértéknél. Ellenkező esetben a forráspixel értékére kerül beállításra. maxValue figyelmen kívül marad.

Küszöbölési szabály

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

A Truncate Thresholding eredménye

A 7. ábra mutatja a Truncate Thresholding alkalmazásának eredményét a bemeneti képre. Vegyük észre, hogy a küszöbérték ( 127 ) feletti összes értéket 127-re állítjuk, és minden 127-nél kisebb vagy azzal egyenlő értéket változatlanul hagyunk. maxValue-t figyelmen kívül hagyjuk.

7. ábra : Truncate thresholding (thresh = 127)

Threshold to Zero ( type = THRESH_TOZERO )

Egy ilyen típusú küszöbértékelésnél a célpixel értéke a megfelelő forráspixel értékére kerül beállításra, ha a forráspixel értéke nagyobb, mint a küszöbérték. Ellenkező esetben nullára kerül beállításra. maxValue figyelmen kívül hagyásra kerül.

Küszöbértékelési szabály

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

A küszöbérték nullára történő módosításának eredménye

8. ábra: Threshold to Zero ( thresh = 127 )

Invertált Threshold to Zero ( type = THRESH_TOZERO_INV)

Egy ilyen típusú küszöbértékelésnél a célpixel értékét nullára állítjuk, ha a forráspixel értéke nagyobb, mint a küszöbérték. Ellenkező esetben a forráspixel értékére kerül beállításra. maxValue figyelmen kívül hagyásra kerül.

Küszöbszabály

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

A nullára fordított küszöb eredmény

A 9. ábra mutatja a nullára fordított küszöb alkalmazásának eredményét a bemeneti képre. A küszöbérték alatti számok megtartják szürkeárnyalatos értéküket, a küszöbérték feletti számok pedig a határérték kivételével 0 értékűek. A határon lévő leleteket az okozza, hogy a határon lévő pixelértékek néhány pixel alatt 0-ról a szám értékére lépnek át. Így a határon lévő pixelek egy része a küszöbérték alatt van.

9. ábra: Invertált küszöbérték nullára ( thresh = 127 )

Kód és példakép letöltése

.

Vélemény, hozzászólás? Kilépés a válaszból

Az e-mail-címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

Archívum

  • 2022 január
  • 2021 december
  • 2021 november
  • 2021 október
  • 2021 szeptember

Meta

  • Bejelentkezés
  • Bejegyzések hírcsatorna
  • Hozzászólások hírcsatorna
  • WordPress Magyarország
  • 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