Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

4. diel - Thresholding a analýza obrázkov v Pythone

V minulej lekcii, Práca s pixelmi a operácie s obrázkami v Pythone , sme si ukázali, ako pracovať s jednotlivými pixely obrázkov v Pythone a vykonávať aritmetické operácie. V dnešnom Python tutoriálu sa zameriame na funkciu threshold(), ktorú sme v minulej lekcii využili.

Pre ukážku budem ako vždy používať obrázok lietadla:

Ukážkový obrázok lietadla - Analýza obrazu a videa v Pythone

Thresholding

Thresholding je najzákladnejšia spôsob ako vytvoriť binárnu obrázok čiže masku. Maska nie je nič iné ako binárny obrázok (obrázok o 2 hodnotách), ktorý pomocou bitových operácií alebo funkcií aplikujeme na obrázok.

Najskôr si niečo povieme o funkciách threshold() a adaptiveThreshold() v knižnici OpenCV. Threshold znamená anglicky prah. Thresholding slúžia k zjednodušeniu vizuálnych dát tak, aby sa lepšie analyzovala. Je predsa len jednoduchšie pracovať s 2 hodnotami než s 256. Thresholding dokáže previesť pixely buď na biele alebo čierne, záleží na parametroch a typu funkcie, ktorú zvolíme. Jedným zo základných parametrov tejto funkcie je prahová hodnota, ktorá pixely rozdelí na 2 skupiny, a maximálna hodnota. Ak by prahová hodnota bola napr. 100 z 255, všetky pixely pod hodnotou 100 by boli čierne a pixely nad hodnotou 100 budú mať onú maximálnu hodnotu, v našom prípade budú biele. Pixely budú mať 2 hodnoty len vtedy, keď obrázok konvertujú na GRAYSCALE. Ak ponecháme obrázok farebný, bude sa jednať o farby a nie o čiernu a bielu.

Typy thresholding funkcií, ktoré knižnica OpenCV ponúka, sú nasledujúce:

  • THRESH_BINARY
  • THRESH_BINARY_INV
  • THRESH_TRUNC
  • THRESH_TOZERO
  • THRESH_TOZERO_INV
  • THRESH_MASK
  • THRESH_OTSU
  • THRESH_TRIANGLE

Teraz si thresholding predvedieme na našom obrázku:

import cv2
import numpy as np
import os

img = cv2.imread("letadlo.jpg")
img = cv2.resize(img, (640, 480))
cv2.imshow("pred", img)
ret, img = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY)
cv2.imshow("po", img)
cv2.waitKey()
cv2.destroyAllWindows()

Obrázok si najskôr načítame a potom zmenšíme, aby sa nám zmestil na obrazovku. Aplikujeme threshold THRESH_BINARY počiatočnú hranicu 100 a maximálna 255 pomocou cv2.threshold(img, 100, 255, cv2.THRESH_BINARY). Funkcia vracia okrem obrázku tiež hodnotu ret. Ak použijeme cv.THRESH_OTSU, funkcia cez ret vracia optimálnu prahovú hodnotu, inak vracia prahovú hodnotu, ktorú sme zadali.

Môžeme sa uistiť, že obrázok je naozaj stále farebný:

Thresholding na obrázku v Pythone - Analýza obrazu a videa v Pythone

Teraz aplikujeme threshold THRESH_BINARY počiatočnú hranicu 150 a maximálny 255 na GRAYSCALE obrázok:

img = cv2.imread("letadlo.jpg")
img = cv2.resize(img, (640, 480))
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, img = cv2.threshold(img, 150, 255, cv2.THRESH_BINARY)
cv2.imshow("obrazek", img)
cv2.waitKey()
cv2.destroyAllWindows()

Obázek má už len 2 farby a to čiernu a bielu:

Čiernobiely thresholding na obrázku v Pythone - Analýza obrazu a videa v Pythone

AdaptiveThreshold

Funkcia cv.adaptiveThreshold() robí to isté ako funkcia threshold(), ale prahovú hodnotu si zistí podľa algoritmu, ktorý zvolíme. Parametre funkcie sú nasledovné:

  • obrázok
  • Maximálna hodnota
  • Algoritmus - algoritmus, ktorý použijeme pre výpočet optimálnej prahové hodnoty
  • typ
  • Veľkosť bloku - x * x pixelov, ktoré algoritmus analyzuje
  • Konštanta - konštanta sa odpočíta od výsledkov algoritmu

Na výber tu máme zo 2 algoritmov:

  • ADAPTIVE_THRESH_MEAN_C - Prahová hodnota priemer bloku
  • ADAPTIVE_THRESH_GAUSSIAN_C - Prahová hodnota vážený súčet bloku

Samotnú funkcii si teraz ukážeme na našom obrázku:

img = cv2.imread("letadlo.jpg")
img = cv2.resize(img, (640, 480))
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 15, 1)
cv2.imshow("obrazek", img)
cv2.waitKey()
cv2.destroyAllWindows()

Obrázok si načítame, zmenšíme a prevedieme na GRAYSCALE. Následne aplikujeme funkciu adaptiveThreshold() s algoritmom ADAPTIVE_THRESH_GAUSSIAN_C, typom THRESH_BINARY, veľkosťou bloku 15 a konštantou 1. Obrázok zobrazíme:

Obrázok s adaptívne Threshold v Pythone - Analýza obrazu a videa v Pythone

Teraz už vieme, ako a na čo slúži thresholding :)

Zdrojový kód nájdete na stiahnutie v prílohe článku. V budúcej lekcii, Bitové operácie a filtrovanie farieb obrázkov v Pythone , sa pozrieme odfiltrovanie farieb z obrázka a binárne operácie, ktoré sme použili v predchádzajúcich lekciách.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 30x (383.73 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Python

 

Predchádzajúci článok
Práca s pixelmi a operácie s obrázkami v Pythone
Všetky články v sekcii
Analýza obrazu a videa v Pythone
Preskočiť článok
(neodporúčame)
Bitové operácie a filtrovanie farieb obrázkov v Pythone
Článok pre vás napísal MQ .
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Používám hlavně Python a zajímám se o Deep Learning a vše kolem.
Aktivity