OpenCV adaptív küszöbérték Pythonban a cv2.adaptiveThreshold() PlatoBlockchain adatintelligenciával. Függőleges keresés. Ai.

OpenCV adaptív küszöbérték Pythonban a cv2.adaptiveThreshold() segítségével

Bevezetés

A küszöbérték egy egyszerű és hatékony technika a kép alapvető szegmentálására és binarizálására (bináris képpé alakítására), ahol a pixelek vagy 0 or 1 (Vagy 255 ha egész számokat használ ezek ábrázolására).

Jellemzően a küszöbértéket használhatja egyszerű háttér-előtér szegmentálás végrehajtására egy képen, és ez minden képponthoz egy egyszerű technika változataira csapódik le:

if pixel_value > threshold:
    pixel_value = MAX
else:
    pixel_value = 0

Az egyszerű küszöbérték szembetűnő problémákkal jár, és meglehetősen tiszta bevitelt igényel, ami sok felhasználási esetben nem túl praktikus. A fő szabálysértő egy globális küszöbérték, amelyet a teljes képre alkalmaznak, míg a képek ritkán elég egységesek ahhoz, hogy az általános küszöbértékek működjenek, hacsak nem mesterségesek.

A globális küszöb jól működne a fekete-fehér könyv karaktereinek szétválasztására a beolvasott oldalakon. A globális küszöbérték nagy valószínűséggel meghiúsul az ugyanazon oldal telefonos képén, mivel a fényviszonyok az oldal egyes részein változhatnak, így a globális küszöbérték túl érzékeny a valós adatokra.

Ennek leküzdésére – alkalmazhatjuk helyi küszöbértékeket, az úgynevezett technikával adaptív küszöbérték. Ahelyett, hogy a kép minden részét ugyanazzal a szabállyal kezelnénk, mindegyiknél módosíthatjuk a küszöbértéket helyi ez megfelelőnek tűnik hozzá. Ez a küszöbértéket részben invariánssá teszi a világítás, a zaj és egyéb tényezők változásaitól. Noha a küszöbérték sokkal hasznosabb, mint a globális küszöbérték, maga a küszöbérték korlátozott, merev technika, és a legjobb a kép-előfeldolgozáshoz (különösen az elvetendő képek azonosításához), nem pedig a szegmentáláshoz.

Kényesebb, kontextust igénylő alkalmazások esetén jobb, ha fejlettebb technikákat alkalmaz, beleértve a mély tanulást is, amely a számítógépes látás közelmúltbeli fejlődésének hajtóereje.

Adaptív küszöbölés OpenCV-vel

Töltsünk be egy változó megvilágítású képet, ahol a kép egyik része jobban fókuszál, mint a másik, és a kép szögből készül. Egy kép, amit Harold McGee-ről készítettem “Ételről és főzésről” remekül szolgál majd!

img = cv2.imread('book.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)

Most, normál küszöbértékkel, megpróbálhatjuk elválasztani a betűket a háttértől, mivel egyértelmű színkülönbség van köztük. Minden papírszín háttérként lesz kezelve. Mivel nem igazán tudjuk, mi legyen a küszöb, alkalmazzuk Otsu módszerét a jó érték meghatározásához, előrevetítve, hogy a kép némileg bimodális lesz (többnyire két szín dominál):

img = cv2.imread('book.jpg')


gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (7, 7), 0)

ret, mask = cv2.threshold(blurred, 0, 255, cv2.THRESH_OTSU)
print(f'Threshold: {ret}')

fig, ax = plt.subplots(1, 2, figsize=(12, 5))
ax[0].imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
ax[1].imshow(cv2.cvtColor(mask, cv2.COLOR_BGR2RGB))

Nézzük az eredményt:

OpenCV adaptív küszöbérték Pythonban a cv2.adaptiveThreshold() PlatoBlockchain adatintelligenciával. Függőleges keresés. Ai.

Jaj. A szöveg bal oldala túlnyomórészt elhalványult, az ereszcsatorna körüli árnyék teljesen felemésztette a kép egy részét, és a szöveg túl telített! Ez egy „vadon élő” kép, és az általános szabályok, például a globális küszöbérték, nem működnek jól. Mi legyen a küszöb? Ez a kép részétől függ!

A cv2.adaptiveThreshold() módszer pontosan ezt teszi lehetővé:

cv2.adaptiveThreshold(img, 
                      max_value, 
                      adaptive_method, 
                      threshold_method, 
                      block_size, 
                      C)

A adaptive_method lehet a cv2.ADAPTIVE_THRESH_MEAN_C or cv2.ADAPTIVE_THRESH_GAUSSIAN_C, Ahol C az utolsó beállított argumentum. Mindkét módszer a küszöböt a kérdéses pixel szomszédai szerint számítja ki, ahol a block_size megszabja a figyelembe veendő szomszédok számát (a környék területét).

ADAPTIVE_THRESH_MEAN_C veszi a szomszédok átlagát és levonja C, Míg a ADAPTIVE_THRESH_GAUSSIAN_C veszi a szomszédok Gauss-súlyozott összegét és levonja C.

Tekintse meg gyakorlatias, gyakorlati útmutatónkat a Git tanulásához, amely tartalmazza a bevált gyakorlatokat, az iparág által elfogadott szabványokat és a mellékelt csalólapot. Hagyd abba a guglizást a Git parancsokkal, és valójában tanulni meg!

Lehetővé teszi binarizálási stratégia beállítását is, de erre korlátozódik THRESH_BINARY és a THRESH_BINARY_INV, és a közöttük való váltás hatékonyan váltja át, hogy mi a „háttér” és mi az „előtér”.

A módszer csak a kép maszkját adja vissza – a visszatérési kódot és a maszkot nem. Próbáljuk meg szegmentálni a karaktereket ugyanazon a képen, mint korábban, adaptív küszöbérték használatával:


img = cv2.imread('book.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (7, 7), 0)


mask = cv2.adaptiveThreshold(blurred, 
                              255, 
                              cv2.ADAPTIVE_THRESH_MEAN_C, 
                              cv2.THRESH_BINARY, 
                              31, 
                              10)


fig, ax = plt.subplots(1, 2, figsize=(12, 5))
ax[0].imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
ax[1].imshow(cv2.cvtColor(mask, cv2.COLOR_BGR2RGB))
plt.tight_layout()

Ez sokkal tisztább képet eredményez:

OpenCV adaptív küszöbérték Pythonban a cv2.adaptiveThreshold() PlatoBlockchain adatintelligenciával. Függőleges keresés. Ai.

Jegyzet: A block_size Az argumentumnak páratlan számnak kell lennie.

Hasonló módon alkalmazhatjuk Gauss-küszöbértéket:

mask = cv2.adaptiveThreshold(blurred, 
                              255, 
                              cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
                              cv2.THRESH_BINARY, 
                              31, 
                              10)

Ami végül is elég kielégítő képet produkál:

OpenCV adaptív küszöbérték Pythonban a cv2.adaptiveThreshold() PlatoBlockchain adatintelligenciával. Függőleges keresés. Ai.

Mind a blokkméret (szomszéd terület), mind C hiperparamétereket kell itt hangolni. Próbáljon ki különböző értékeket, és válassza ki azt, amelyik a legjobban illik a képéhez. Általánosságban elmondható, hogy a Gauss-küszöbérték kevésbé érzékeny a zajra, és kissé homályosabb, tisztább képeket eredményez, de ez a bemenettől függően változik.

Az adaptív küszöbérték korlátai

Az adaptív küszöböléssel el tudtuk kerülni a küszöbérték átfogó korlátozását, de ez még mindig viszonylag merev, és nem működik jól színes bemeneteknél. Például, ha betöltünk egy képet ollóról és egy kis készletről, különböző színekkel, akkor még az adaptív küszöbbeállításnál is gondok adódhatnak a megfelelő szegmentálással, bizonyos sötét elemek körvonalazódásával, de a teljes objektumok figyelembevétele nélkül:

OpenCV adaptív küszöbérték Pythonban a cv2.adaptiveThreshold() PlatoBlockchain adatintelligenciával. Függőleges keresés. Ai.

Ha csípjük a blokk méretét és C, megtehetjük, hogy a nagyobb foltokat ugyanannak az objektumnak a részének tekintse, de akkor problémákba ütközik a szomszédos méretek beállításakor. túl globális, visszatérve ugyanazokra az átfogó problémákra a globális küszöbértékkel kapcsolatban:

OpenCV adaptív küszöbérték Pythonban a cv2.adaptiveThreshold() PlatoBlockchain adatintelligenciával. Függőleges keresés. Ai.

Következtetés

Az elmúlt években a bináris szegmentációt (mint amit itt tettünk) és a többcímkés szegmentációt (ahol tetszőleges számú osztályt kódolhat) sikeresen modellezték mély tanulási hálózatokkal, amelyek sokkal erősebbek és rugalmasabbak. Ezenkívül globális és helyi kontextust is kódolhatnak az általuk szegmentált képekbe. A hátránya az, hogy adatokra van szükség a képzésükhöz, valamint időre és szakértelemre.

Menet közbeni, egyszerű küszöbérték-meghatározáshoz használhatja az OpenCV-t, és a globális küszöbérték-stratégiák helyett adaptív küszöbértékekkel küzdhet le néhány korlát ellen. A pontos, termelési szintű szegmentálás érdekében érdemes neurális hálózatokat használni.

Továbblépve – Gyakorlati mélytanulás a számítógépes látáshoz

Érdeklődő természete arra készteti, hogy tovább menjen? Javasoljuk, hogy tekintse meg nálunk Tanfolyam: „Practical Deep Learning for Computer Vision with Python”.

OpenCV adaptív küszöbérték Pythonban a cv2.adaptiveThreshold() PlatoBlockchain adatintelligenciával. Függőleges keresés. Ai.

Újabb számítógépes látás tanfolyam?

Nem végezzük az MNIST számjegyek osztályozását vagy az MNIST divatot. Régen kiszolgálták a részüket. Túl sok tanulási erőforrás összpontosít az alapvető adatkészletekre és alapvető architektúrákra, mielőtt a fejlett feketedoboz-architektúrákra hagyná a teljesítmény terhét.

Mi arra szeretnénk koncentrálni demisztifikáció, gyakorlatiasság, megértés, intuíció és a valódi projektek. Tanulni akar hogyan tudsz változtatni? Elvezetjük Önt az agyunk képfeldolgozási módjától a mellrák kutatási szintű mélytanulási osztályozójának megírásáig a mély tanulási hálózatokig, amelyek „hallucinálnak”, gyakorlati munkán keresztül megtanítjuk az alapelveket és az elméletet, felkészítve a know-how és eszközök ahhoz, hogy szakértővé váljon a mélytanulás alkalmazásában a számítógépes látás megoldásában.

Mi van benne?

  • A látás első alapelvei és hogyan lehet a számítógépeket „látni” tanítani
  • A számítógépes látás különböző feladatai és alkalmazásai
  • A szakma eszközei, amelyek megkönnyítik a munkáját
  • Adatkészletek keresése, létrehozása és felhasználása számítógépes látáshoz
  • A konvolúciós neurális hálózatok elmélete és alkalmazása
  • Tartományeltolódás, együttes előfordulás és egyéb torzítások kezelése az adatkészletekben
  • Transzfer Tanulás és mások képzési idejének és számítási erőforrásainak felhasználása az Ön javára
  • Korszerű emlőrák osztályozó felépítése és betanítása
  • Hogyan alkalmazzunk egy egészséges adag szkepticizmust a mainstream ötletekhez, és hogyan értsük meg a széles körben elfogadott technikák következményeit
  • A ConvNet „koncepcióterének” megjelenítése t-SNE és PCA segítségével
  • Esettanulmányok arról, hogy a vállalatok hogyan használják a számítógépes látástechnikákat a jobb eredmények elérése érdekében
  • Megfelelő modellértékelés, látens tér vizualizáció és a modell figyelmének azonosítása
  • Domainkutatás végzése, saját adatkészletek feldolgozása és modelltesztek létrehozása
  • Élvonalbeli architektúrák, az ötletek fejlődése, mi teszi őket egyedivé és hogyan valósítsuk meg őket
  • KerasCV – WIP-könyvtár a legkorszerűbb csővezetékek és modellek létrehozásához
  • Hogyan elemezze és olvassa el a dolgozatokat, és saját maga hajtsa végre azokat
  • Modellek kiválasztása az alkalmazástól függően
  • Végpontok közötti gépi tanulási folyamat létrehozása
  • Tájkép és intuíció a tárgyfelismeréshez a gyorsabb R-CNN-ekkel, RetinaNetekkel, SSD-kkel és YOLO-val
  • Példány és szemantikai szegmentáció
  • Valós idejű objektumfelismerés a YOLOv5 segítségével
  • YOLOv5 objektumdetektorok képzése
  • Transzformátorokkal való munkavégzés KerasNLP-vel (ipari erősségű WIP-könyvtár)
  • Transformers integrálása ConvNetekkel a képek feliratainak létrehozásához
  • Deepdream
  • Deep Learning modell optimalizálása számítógépes látáshoz

Időbélyeg:

Még több Stackabus