Obrazy i przetwarzanie obrazów

Ukończone

Zanim będziemy mogli eksplorować przetwarzanie obrazów i inne możliwości przetwarzania obrazów, warto rozważyć, co faktycznie znajduje się w kontekście danych programu komputerowego.

Obrazy jako tablice pikseli

Na komputerze obraz jest tablicą wartości pikseli liczbowych. Rozważmy na przykład następującą tablicę:

 0   0   0   0   0   0   0  
 0   0   0   0   0   0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0   0   0   0   0   0
 0   0   0   0   0   0   0

Tablica składa się z siedmiu wierszy i siedmiu kolumn reprezentujących wartości pikseli obrazu 7x7 pikseli (nazywanego rozdzielczością obrazu). Każdy piksel ma wartość z zakresu od 0 (czarny) do 255 (biały); z wartościami między tymi granicami reprezentującymi odcienie szarości. Obraz reprezentowany przez tę tablicę wygląda podobnie do poniższego (powiększonego) obrazu:

Diagram of a grayscale image.

Tablica wartości pikseli dla tego obrazu jest dwuwymiarowa (reprezentująca wiersze i kolumny lub współrzędne x i y ) i definiuje pojedynczy prostokąt wartości pikseli. Pojedyncza warstwa wartości pikseli, taka jak ta, reprezentuje obraz w skali szarości. W rzeczywistości większość obrazów cyfrowych jest wielowymiarowa i składa się z trzech warstw (znanych jako kanały), które reprezentują kolor czerwony, zielony i niebieski (RGB). Na przykład możemy reprezentować obraz koloru, definiując trzy kanały wartości pikseli, które tworzą ten sam kształt kwadratowy co poprzedni przykład skali szarości:

Red:
 150  150  150  150  150  150  150  
 150  150  150  150  150  150  150
 150  150  255  255  255  150  150
 150  150  255  255  255  150  150
 150  150  255  255  255  150  150
 150  150  150  150  150  150  150
 150  150  150  150  150  150  150

Green:
 0    0    0    0    0    0    0          
 0    0    0    0    0    0    0
 0    0   255  255  255   0    0
 0    0   255  255  255   0    0
 0    0   255  255  255   0    0
 0    0    0    0    0    0    0
 0    0    0    0    0    0    0

Blue:
 255  255  255  255  255  255  255  
 255  255  255  255  255  255  255
 255  255   0    0    0   255  255
 255  255   0    0    0   255  255
 255  255   0    0    0   255  255
 255  255  255  255  255  255  255
 255  255  255  255  255  255  255

Oto wynikowy obraz:

Diagram of a color image.

Purpurowe kwadraty są reprezentowane przez kombinację:

Red: 150 
Green: 0 
Blue: 255 

Żółte kwadraty w środku są reprezentowane przez kombinację:

Red: 255
Green: 255
Blue: 0

Przetwarzanie obrazów przy użyciu filtrów

Typowym sposobem wykonywania zadań przetwarzania obrazów jest zastosowanie filtrów modyfikujących wartości pikseli obrazu w celu utworzenia efektu wizualnego. Filtr jest definiowany przez co najmniej jedną tablicę wartości pikseli, nazywaną jądrami filtrów. Można na przykład zdefiniować filtr z jądrem 3x3, jak pokazano w tym przykładzie:

-1 -1 -1
-1  8 -1
-1 -1 -1

Jądro jest następnie połączone na obrazie, obliczając sumę ważoną dla każdego 3x3 poprawki pikseli i przypisując wynik do nowego obrazu. Łatwiej jest zrozumieć, jak działa filtrowanie, eksplorując przykład krok po kroku.

Zacznijmy od wcześniej eksplorowanego obrazu w skali szarości:

 0   0   0   0   0   0   0  
 0   0   0   0   0   0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0   0   0   0   0   0
 0   0   0   0   0   0   0

Najpierw stosujemy jądro filtru do lewej górnej poprawki obrazu, mnożąc każdą wartość pikseli przez odpowiednią wartość wagi w jądrze i dodając wyniki:

(0 x -1) + (0 x -1) + (0 x -1) +
(0 x -1) + (0 x 8) + (0 x -1) +
(0 x -1) + (0 x -1) + (255 x -1) = -255

Wynik (-255) staje się pierwszą wartością w nowej tablicy. Następnie przenosimy jądro filtru wzdłuż jednego piksela po prawej stronie i powtarzamy operację:

(0 x -1) + (0 x -1) + (0 x -1) +
(0 x -1) + (0 x 8) + (0 x -1) +
(0 x -1) + (255 x -1) + (255 x -1) = -510

Ponownie wynik zostanie dodany do nowej tablicy, która zawiera teraz dwie wartości:

-255  -510

Proces jest powtarzany do momentu, aż filtr zostanie przełożone na całym obrazie, jak pokazano w tej animacji:

Diagram of a filter.

Filtr jest convolved na obrazie, obliczając nową tablicę wartości. Niektóre wartości mogą znajdować się poza zakresem wartości od 0 do 255 pikseli, więc wartości są dostosowywane tak, aby mieściły się w tym zakresie. Ze względu na kształt filtru zewnętrzna krawędź pikseli nie jest obliczana, więc jest stosowana wartość wypełnienia (zwykle 0). Wynikowa tablica reprezentuje nowy obraz, w którym filtr przekształcił oryginalny obraz. W tym przypadku filtr miał wpływ na wyróżnianie krawędzi kształtów na obrazie.

Aby wyraźniej zobaczyć efekt filtru, oto przykład tego samego filtru zastosowanego do rzeczywistego obrazu:

Oryginalny obraz Filtrowany obraz
Diagram of a banana. Diagram of a filtered banana.

Ponieważ filtr jest wypukły na obrazie, tego rodzaju manipulowanie obrazami jest często określane jako filtrowanie splotowe. Filtr używany w tym przykładzie to określony typ filtru (nazywany filtrem laplace ), który wyróżnia krawędzie obiektów na obrazie. Istnieje wiele innych rodzajów filtrów, których można użyć do tworzenia rozmycia, wyostrzenia, inwersji kolorów i innych efektów.