Wykład nr 2
Transformacje na tablicach LUT

Grafika w Mathematice - import, pobieranie danych, export

Poniżej import obrazka z podaną ścieżką:

lenna=Import["c:/Users/wrzask/Desktop/PO/lenna.jpg"]
datalenna=Import["c:/Users/wrzask/Desktop/PO/lenna.jpg","Data"];
Dimensions[datalenna]

Image[datalenna/255,ColorSpace->"RGB"]

Histogram i tabele LUT

Poniżej histogram z danych obrazu lenna.jpg. Flatten[] przekształca dane do tablicy jednowymiarowej o 512x512x3 elementach

Dimensions[Flatten[datalenna]]

Z histogramu możemy odczytać ile danych ma konkretne wartości. Np. wartości z przedziału 90-100 ma prawie 70000 danych.

Histogram[Flatten[datalenna]]

LUT tzw. Lookup Table (tablica podglądu)
W przetwarzaniu obrazu tablice LUT dają na wyjściu wartości lub przekształcenie dla każdego z przedziału wartości danych. 
Dla przykładu patrząc na histogram powyżej możemy chcieć wyzerować wszystkie wartości poniżej 50, zmaksymalizować wszystkie powyżej 200 (przypisac wartość 255), a pozostałe podzielić na 2. Wtedy przekształcenie LUT będzie wygladało w nastepujacy sposób:
LUT(i)=({{{, ({{0,, i<50}, {i/2,, 50≤i≤200}, {255,, i>200}})}})

Teraz wykonamy to przykładowe przekształcenie na danych grafiki lenna.jpg

examplelenna=datalenna/.{R_,G_,B_}->
{Piecewise[{{0,R<50},{R/2,50≤R≤200},{255,R>200}}],
Piecewise[{{0,G<50},{G/2,50≤G≤200},{255,G>200}}],
Piecewise[{{0,B<50},{B/2,50≤B≤200},{255,B>200}}]};
{Image[datalenna/255,ColorSpace->"RGB"],
Image[examplelenna/255,ColorSpace->"RGB"]}

{Histogram[Flatten[datalenna]],
Histogram[Flatten[examplelenna]]}

Kontrastowanie

Do kontrastowania używamy nastepującej tablicy LUT
LUT(i)=({{{, ({{0,, a(i-((Subscript[i, max])/2))+((Subscript[i, max])/2)<0}, {a(i-((Subscript[i, max])/2))+((Subscript[i, max])/2),, 0≤a(i-((Subscript[i, max])/2))+((Subscript[i, max])/2)≤(Subscript[i, max])}, {(Subscript[i, max]),, a(i-((Subscript[i, max])/2))+((Subscript[i, max])/2)>(Subscript[i, max])}})}})
Jeżeli wartość stałej a, jest większa od 1, to nastąpi zwiększenie kontrastu obrazu. W przeciwnym wypadku, gdy wartość a jest mniejsza od 1, nastąpi zmniejszenie kontrastu obrazu. 
Poniżej przykład dla a=5, czyli zwiększamy kontrast

a=5;
contrastlenna=datalenna/.{R_,G_,B_}->
{Piecewise[{{0,a (R-255*0.5)+255*0.5<0},{a (R-255*0.5)+255*0.5,0<=a (R-255*0.5)+255*0.5≤255},{255,a (R-255*0.5)+255*0.5>255}}],
Piecewise[{{0,a (G-255*0.5)+255*0.5<0},{a (G-255*0.5)+255*0.5,0<=a (G-255*0.5)+255*0.5≤255},{255,a (G-255*0.5)+255*0.5>255}}],
Piecewise[{{0,a (B-255*0.5)+255*0.5<0},{a (B-255*0.5)+255*0.5,0<=a (B-255*0.5)+255*0.5≤255},{255,a (B-255*0.5)+255*0.5>255}}]};
{Image[datalenna/255,ColorSpace->"RGB"],Image[contrastlenna/255,ColorSpace->"RGB"]}

{Histogram[Flatten[datalenna]],Histogram[Flatten[contrastlenna]]}

Jasność obrazu

Do zmiany jasności obrazu używamy nastepującej tablicy LUT
LUT(i)=({{{, ({{0,, i+b<0}, {i+b,, 0≤i+b≤(Subscript[i, max])}, {(Subscript[i, max]),, i+b>(Subscript[i, max])}})}})
Jeżeli wartość stałej b jest większa od 0 nastąpi zwiększenie jasności obrazu. W przeciwnym wypadku, gdy wartość b jest mniejsza od 0, nastąpi zmniejszenie jasności obrazu.
Poniżej przykład dla b=50, czyli zwiekszamy jasność obrazu

b=50;
lightlenna=datalenna/.{R_,G_,B_}->
{Piecewise[{{0,R+b<0},{R+b,0≤R+b≤255},{255,R+b>255}}],
Piecewise[{{0,G+b<0},{G+b,0≤G+b≤255},{255,G+b>255}}],
Piecewise[{{0,B+b<0},{B+b,0≤B+b≤255},{255,B+b>255}}]};
{Image[datalenna/255,ColorSpace->"RGB"],Image[lightlenna/255,ColorSpace->"RGB"]}

{Histogram[Flatten[datalenna]],Histogram[Flatten[lightlenna]]}

Ekspozycja obrazu

Ekspozycja to parametr mówiący o tym ile światła odbitego od fotografowanych obiektów dociera do matrycy bądź innego materiału światłoczułego  Gdy zdjęcie jest już zrobione możemy jeszcze zasymulować dłuższe lub krótsze otwarcie migawki przy pomocy następującej tablicy LUT
LUT(i)=({{{, ({{c i,, c i<(Subscript[i, max])}, {(Subscript[i, max]),, c i≥ (Subscript[i, max])}})}})
Jeżeli wartość stałej c  jest większa od 1 nastąpi zwiększenie ekspozycji obrazu. W przeciwnym wypadku, gdy wartość c jest mniejsza od 1, nastąpi zmniejszenie ekspozycji obrazu.

Poniżej przykład dla c=3, czyli zwiększamy ekspozycję

c=3;
expolenna=datalenna/.{R_,G_,B_}->
{Piecewise[{{ c R,c R<255},{255,c R≥ 255}}],
Piecewise[{{ c G,c G<255},{255,c G≥ 255}}],
Piecewise[{{ c B,c B<255},{255,c B≥ 255}}]};
{Image[datalenna/255,ColorSpace->"RGB"],Image[expolenna/255,ColorSpace->"RGB"]}

{Histogram[Flatten[datalenna]],Histogram[Flatten[expolenna]]}

Ćwiczenia na laboratorium

Ćwiczenie nr 3 - 2p.
Należy:
1. Zaimportować dowolną grafikę RGB.
2. Wykonać kontrastowanie grafiki przy użyciu tabeli LUT dla trzech parametrów a (tak jak w materiałach powyżej)
3. Porównać histogramy po przekształceniu z histogramem z danych obrazu wejściowego
4. Wyeksportować tak przygotowane trzy grafiki

Ćwiczenie nr 4 - 2p.
Należy:
1. Zaimportować dowolną grafikę RGB.
2. Zmienić jasnośc grafiki przy użyciu tabeli LUT dla trzech parametrów b (tak jak w materiałach powyżej)
3. Porównać histogramy po przekształceniu z histogramem z danych obrazu wejściowego
4. Wyeksportować tak przygotowane trzy grafiki

Ćwiczenie nr 5 - 2p.
Należy:
1. Zaimportować dowolną grafikę RGB.
2. Zmienić ekspozycję grafiki przy użyciu tabeli LUT dla trzech parametrów c (tak jak w materiałach powyżej)
3. Porównać histogramy po przekształceniu z histogramem z danych obrazu wejściowego
4. Wyeksportować tak przygotowane trzy grafiki

Pytania na kolokwium

✔ Opisz algorytmy kontrastowania, zmiany jasności i zmiany ekspozycji obrazu przy pomocy tabeli LUT. W jaki sposób parametry tych przekształceń wpływają obraz wyjściowy. - p. p.