Przetwarzanie obrazów jest jednym z najgorętszych tematów w kontekście sztucznej inteligencji i nowoczesnych technologii. Mimo skomplikowanych teorii korzystanie z niej jest osiągalnym tematem dla każdego z nas z lekkim zacięciem technicznym, może być wręcz codziennością i czymś z czego będzie można korzystać zarówno w życiu prywatnym jak i pracy. Podstawowy zestaw do zbudowania systemu rozpoznawania twarzy w naszych drzwiach wejściowych to koszt rzędu 300 zł.

Jak widzi komputer?

Aby wydajnie skorzystać z możliwości jakie dają rozwiązania Computer Vision, warto zrozumieć czym dla komputera tak naprawdę jest obraz. Nasz mózg widzi kolory, krawędzie które tworzą kształty które interpretujemy jako kot, pies czy jabłko, ale czym widok kota psa czy jabłka jest dla naszego mózgu? Z pewnością badacze mózgu i naszego systemu wzrokowego są wstanie odpowiedzieć na to pytanie. My natomiast odpowiemy sobie na pytanie czym ten kot czy pies jest dla komputera.

Kolor

RGB

W najbardziej popularnym wydaniu kolor jest reprezentowany przez 3 połączone ze sobą liczby. Każda z tych liczb reprezentuje jeden kolor, czerwony, zielony bądź niebieski a w połączeniu pozwalają zbudować ich mix, tak jakbyśmy malowali farbami. Każdy z kolorów ma zakres od 0 do 255. Także kolor czerwony na ekranie to 255,0,0 kolor zielony to 0,255,0 a kolor niebieski to 0,0,255 w skrócie ten sposób zapisu kolory nazywa się RGB. Dla przykładu kolor brązowy wygląda następująco 150,75,0

HSV

Alternatywną prezentacją kolorów w komputerze jest HSV, które rozwija się na hue, saturation i value. Została ona wymyślona w latach ’70 przez grafików komputerów według, których była to reprezentacja oddająca kolor w bardziej zbliżony sposób do tego jak postrzega kolor ludzkie oko. Możemy sobie wyobrazić to w następujący sposób

hue ( odcień )

Reprezentuje kolor jako wartość na okręgu od 0o do 360o

  • Czerwony mieści się między 0 a 60 stopni
  • Żółty mieści się między 61 a 120 stopni
  • Zielony mieści się między 121 a 180 stopni
  • Cyjan mieści się między 181 a 240 stopni
  • Niebieski mieści się między 241 a 300 stopni
  • Magenta mieści się między 301 a 360 stopni

saturation ( nasycenie )

Nasycenie mówi o ilości szarości w kolorze od 0 do 100 procent. Zmniejszanie wartości do 0 wprowadza odcień szarości w kolorze i powstaje efekt koloru wyblakłego. Natomiast 100% jest podstawową wartością koloru bez odcienia.

value/brightness (jasność)

Współgra z nasyceniem i opisuje jasność, moc wartości odcienia i nasycenia. Rezprezentowany jest przez wartości od 0 do 100 procent, gdzie 0 jest w całości kolorem czarnym, a 100 jest najmocniejszą wartością i pokazuje kolor w największej mocy.

Przykład reprezentacji koloru w HSV oraz RGB

Czym różnią się w wykorzystaniu modele RGB i HSV ?

W przetwarzaniu obrazu ważnym elementem jest poszukiwanie atrybutów które pozwalają nam lepiej rozpoznać elementy na obrazie. Kiedy próbujemy rozpoznać czerwoną różę na ekranie:

RGB

Możemy posłużyć się reprezentacją kolorów RGB i wywołując poniższe komendy:

import cv2

img = cv2.imread('D:\Biznes\Analityk.edu.pl\kolory\Red-rose.jpg')

b,g,r = cv2.split(img)
cv2.imshow('niebieski', b)
cv2.imshow('zielony', g)
cv2.imshow('czerwony', r)
img_merge = cv2.merge((b,g,r))
cv2.imshow('połączony', img_merge)

cv2.waitKey(0)
cv2.destroyAllWindows()

Zobaczymy powyższe zdjęcie podzielone na 3 kanały, na jednym obrazku zobaczymy wartości od 0 (brak koloru, czerń) do 255 (maksymalna wartość koloru niebieskiego czyli biel) , na pierwszym widzimy kanał niebieski, na drugim zielony, a na trzecim czerwony, na końcu natomiast nałożenie wszystkich trzech kanałów razem czyli obrazek RGB. Widzimy, aby otrzymać żółtawy kolor krawata czy jasno brązowy garnituru, musimy nałożyć na siebie trochę każdego z kolorów.

Łatwo możemy zauważyć, że o ile biała koszula ma praktycznie takie same wartości dla każdego z kolorów RGB, o tyle sama róża w kanale czerwonym ma wartości maksymalne (kolor biały, 255) a kanał zielony i niebieski prawie równy 0 (kolor czarny, 0). Niestety w kanale czerwonym, koszula oraz krawat maja bardzo podobne wartości koloru czerwonego co róża, gdyż w ostatecznej sumie trzech kolorów RGB przy ich maksymalnej wartości otrzymujemy kolor biały.

HSV

Korzystając natomiast z reprezentacji kolorów HSV tego samego obrazka, wywołując poniższe komedy:

import cv2
img = cv2.imread('D:\Biznes\Analityk.edu.pl\kolory\Red-rose.jpg')

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

h,s,v = cv2.split(hsv)
cv2.imshow('odcień', h)
cv2.imshow('nasycenie', s)
cv2.imshow('jasność', v)

cv2.waitKey(0)
cv2.destroyAllWindows()

Kanał jasności bardzo przypomina nam kanały RGB gdyż skupia się jedynie na wartości siły koloru czyli reprezentacji obrazu czarno-białego. Kanał odcieni jest dla ludzkiego oka praktycznie nieczytelny i bezwartościowy. Natomiast co ciekawego możemy zauważyć w kanale saturacji, róża jest idealnie wręcz widoczna na tle czerni. Łatwo stwierdzić przy takiej reprezentacji, w sposób praktycznie jednoznaczny, co różą jest, a co nie jest.

Krawędzie

Krawędzie są połączeniem pikseli które zawierają wartość RGB, o których mówiliśmy w kontekście kolorów. Także jeden piksel czyli punkt w obrazie jest stworzony z kombinacji (0-255, 0-255, 0-255).

Dla ułatwienia możemy mówić tylko o zakresie 0-255 gdzie 0 to jest czernią, a 255 to czysta biel. Wtedy reprezentacja litery S wygląda następująco

A krawędzie buduje nam różnica w wartościach pikseli, jeśli spojrzeć na wszystkie wartości poniżej 070 to zobaczymy patrząc na same liczby pewnego rodzaju wzorzec.

Podsumowując

Komplikując kolor przez zamienienie wartości (0-255) na ( 0-255, 0-255, 0-255) oraz zwiększenie gęstości pikseli czyli punktów w obrazie jesteśmy w stanie budować bardzo skomplikowane obrazy zwierząt, krajobrazów samochodów i ludzi. Pojawia się pytanie jak na podstawie takiego zbioru liczb być w stanie rozpoznać co na zdjęciu jest kotem a co samochodem? Jak rozpoznać czy kot stoi czy leży, jest przodem czy tyłem etc.

Na to pytanie pomaga nam odpowiedzieć praca wielu wybitnych programistów i naukowców którzy przygotowali zbiór działań, metod i sposobów w bibliotece nazwanej OpenCV czyli „ Open Computer Vision co w wolnym tłumaczeniu oznacza „Otwarty Komputerowy Wzrok” dzięki czemu bez głębokiego zrozumienia przetwarzania obrazu jesteśmy w stanie, w kilku prostych krokach zrozumieć co dzieje się na zdjęciu bądź video.

Co dalej?

Wykorzystując wspomniane metody można doprowadzić w dość prosty sposób do poniższego efektu co będzie pokazane już w kolejnym materiale

Kolorowa zostaje tylko czerwona róża

Jeśli masz pytania bądź wątpliwości napisz komentarz bądź skorzystaj z emaila kontaktowego.