Splot i jądro splotu
Przy obliczaniu danych koloru piksela wyjściowego można wykorzystywać wartości pikseli źródłowych otaczających dany piksel. Takie obliczenia nazywamy splotem:
rgb(r0,g0,b0) | rgb(r1,g1,b1) | rgb(r2,g2,b2) |
rgb(r3,g3,b3) | rgb(r4,g4,b4) | rgb(r5,g5,b5) |
rgb(r6,g6,b6) | rgb(r7,g7,b7) | rgb(r8,g8,b8) |
Aby obliczyć wartości koloru dla piksela wynikowego używamy jądra splotu. Jądro splotu to macierz liczb:
która może być przedstawiona w postaci zwykłej tablicy 1-wymiarowej:
Wartości kolorów dla koloru wynikowego obliczamy następująco:
Mamy zestaw pikseli o kolorach:
rgb(20,185,250) | rgb(40,165,240) | rgb(60,145,230) |
rgb(80,125,220) | rgb(100,105,210) | rgb(120,85,205) |
rgb(140,66,200) | rgb(160,45,195) | rgb(180,25,190) |
Stosujemy jądro:
Wykonujemy obliczenia:
Rysujemy piksel wynikowy:
rgb(100,105,217) | ||
Jak widzimy – zgodnie z oczekiwaniami – piksel ma nieco więcej komponentu niebieskiego.
Jak widzimy przy obliczeniu jednego piksela należy przeprowadzić wiele obliczeń obciążających procesor komputera.
Przy obrazku o wymiarach 300 x 150 z jądrem 3 x 3 procesor musi wykonać 300 x 150 x 3 x 17 = 2 295 000 operacji
Dlatego filtrowanie splotowe najlepiej wykonać wcześniej, a następnie załadować gotowy, zapamiętany obraz.
Wartości w macierzy (jądra) splotu sumują się do 1.0. Gdy wartości te nie sumują się do jedności nastąpi zmiana jasności obrazu (co oczywiście można wykorzystać).
Wartości w macierzy jądra splotu mogą być również wyższe od jedności. Mogą też być liczbami ujemnymi.
Jądro nie musi mieć rozmiaru m x n = 3 x 3. m i n mogą być dowolnymi liczbami nieparzystymi (liczby parzyste prowadzą do zakłócenia symetrii tworzonego efektu). Należy jednak pamiętać o
zwiększeniu się obciążenia procesora.
Algorytmy pozwalające na zastosowanie filtrów splotowych przedstawiamy dalej w tekście.