Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 4 - Thresholding a analýza obrázků v Pythonu

V předchozí lekci, Práce s pixely a operace s obrázky v Pythonu, jsme si ukázali práci s jednotlivými pixely a aritmetické operace s obrázky v knihovně OpenCV v Pythonu.

V dnešním Python tutoriálu se zaměříme na funkci threshold(), kterou jsme v minulé lekci využili.

Pro ukázku budu jako vždy používat obrázek letadla:

Ukázkový obrázek letadla - Analýza obrazu a videa v Pythonu

Thresholding

Thresholding je nejzákladnější způsob jak vytvořit binární obrázek neboli masku. Maska není nic jiného než binární obrázek(obrázek o 2 hodnotách), který pomocí bitových operací nebo funkcí aplikujeme na obrázek.

Nejdříve si něco povíme o funkcích threshold() a adaptiveThreshold() v knihovně OpenCV. Threshold znamená anglicky práh. Thresholding slouží ke zjednodušení vizuálních dat tak, aby se lépe analyzovala. Je přeci jen jednodušší pracovat se 2 hodnotami než s 256. Thresholding dokáže převést pixely buď na bílé nebo černé, záleží na parametrech a typu funkce, kterou zvolíme. Jedním ze základních parametrů této funkce je prahová hodnota, která pixely rozdělí na 2 skupiny, a maximální hodnota. Pokud by prahová hodnota byla např. 100 z 255, všechny pixely pod hodnotou 100 by byly černé a pixely nad hodnotou 100 budou mít onu maximální hodnotu, v našem případě budou bílé. Pixely budou mít 2 hodnoty pouze tehdy, když obrázek konvertujeme na GRAYSCALE. Pokud ponecháme obrázek barevný, bude se jednat o barvy a ne o černou a bílou.

Typy thresholding funkcí, které knihovna OpenCV nabízí, jsou následující:

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

Nyní si thresholding předvedeme na našem 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ázek si nejdříve načteme a poté zmenšíme, aby se nám vešel na obrazovku. Aplikujeme threshold THRESH_BINARY s prahovou hodnotou 100 a maximální 255 pomocí cv2.threshold(img, 100, 255, cv2.THRESH_BINARY). Funkce vrací kromě obrázku také hodnotu ret. Pokud použijeme cv.THRESH_OTSU, funkce přes ret vrací optimální prahovou hodnotu, jinak vrací prahovou hodnotu, kterou jsme zadali.

Můžeme se ujistit, že obrázek je opravdu stále barevný:

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

Nyní aplikujeme threshold THRESH_BINARY s prahovou hodnotou 150 a maximální 255 na GRAYSCALE obrázek:

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á již jen 2 barvy a to černou a bílou:

Černobílý thresholding na obrázku v Pythonu - Analýza obrazu a videa v Pythonu

AdaptiveThreshold

Funkce cv.adaptiveThreshold() dělá to samé jako funkce threshold(), ale prahovou hodnotu si zjistí podle algoritmu, který zvolíme. Parametry funkce jsou následující:

  • Obrázek
  • Maximální hodnota
  • Algoritmus - Algoritmus, který použijeme pro vypočtení optimální prahové hodnoty
  • Typ
  • Velikost bloku - x*x pixelů, které algoritmus analyzuje
  • Konstanta - Konstanta se odečítá od výsledků algoritmu

Na výběr zde máme ze 2 algoritmů:

  • ADAPTIVE_THRESH_MEAN_C - Prahová hodnota je průměr bloku
  • ADAPTIVE_THRESH_GAUSSIAN_C - Prahová hodnota je vážený součet bloku

Samotnou funkci si nyní ukážeme na našem 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ázek si načteme, zmenšíme a převedeme na GRAYSCALE. Následně aplikujeme funkci adaptiveThreshold() s algoritmem ADAPTIVE_THRESH_GAUSSIAN_C, typem THRESH_BINARY, velikostí bloku 15 a konstantou 1. Obrázek zobrazíme:

Obrázek s adaptivní thresholdem v Pythonu - Analýza obrazu a videa v Pythonu

Nyní již víme, jak a k čemu slouží thresholding :)

Zdrojový kód najdete ke stažení v příloze článku.

V další lekci, Bitové operace a filtrování barev obrázků v Pythonu, se zaměříme na bitové operace. Ukážeme si jak odfiltrovat barvy z obrázku v knihovně OpenCV.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 28x (383.73 kB)
Aplikace je včetně zdrojových kódů v jazyce Python

 

Předchozí článek
Práce s pixely a operace s obrázky v Pythonu
Všechny články v sekci
Analýza obrazu a videa v Pythonu
Přeskočit článek
(nedoporučujeme)
Bitové operace a filtrování barev obrázků v Pythonu
Článek pro vás napsal MQ .
Avatar
Uživatelské hodnocení:
14 hlasů
Používám hlavně Python a zajímám se o Deep Learning a vše kolem.
Aktivity