Temat: Co to jest LUT?
LUT oznacza Lookup Table (tablica podglądu)
http://pl.wikipedia.org/wiki/Tablicowanie
http://en.wikipedia.org/wiki/Lookup_table
Jeżeli mamy za zadanie przetworzyć obraz w ten sposób, że wartość każdego z pikseli chcemy przeliczyć według określonego wzoru (podczas potęgowania, logarytmowania itp.), to przy rozmiarze na przykład 3000x3000 pikseli, wzór ten będzie musiał być obliczony 9 milionów razy i za każdym razem wynik będzie wstawiany do tablicy pikseli.
Wiemy jednak, że wejściowe wartości brane do obliczeń zawierają się w znanym nam zakresie - piksele mogą przyjmować wartości całkowite od 0 do skali szarości.
Dlatego w celu optymalizacji czasu wykonania przetwarzania, możemy sobie przygotować dodatkową tablicę, o liczbie elementów równej liczbie możliwych wartości na wejściu (na przykład dla skali szarości 255 będzie to 256 elementów).
W każdej komórce tablicy wpisujemy wynik przeliczania naszego wzoru dla poszczególnych wartości pikseli:
lut[i] = funkcja(i);
Następnie podczas przetwarzania obrazu już nic nie obliczamy, tylko wstawiamy do tablicy pikseli wartości z tablicy LUT.
Stosując to rozwiązanie, zajęliśmy dodatkowe miejsce w pamięci, ale dzięki temu nasz wzór przeliczany był tylko 256, a nie 9 milionów razy.
Aby funkcja przetwarzająca obraz w ten sposób była jak najbardziej uniwersalna i mogła działać dla różnych tablic LUT, warto ją napisać w ten sposób, aby tablica LUT była przekazywana jako argument wywołania funkcji, na przykład:
przetwarzaj_obraz_LUT(struct Obraz* o, int* lut);