Tematem ćwiczenia jest napisanie modułu obsługi czarno-białych obrazów rastrowych (ze skalą szarości). Takie obrazy mogą być przedstawione w postaci dwuwymiarowej tablicy, której elementy są liczbami całkowitymi. Każda z liczb reprezentuje kolor jednego punktu (piksela) obrazu, przy czym przyjmuje się, że kolorowi czarnemu odpowiada wartość 0, a kolorowi białemu wartość maksymalna, zależna od liczby poziomów szarości (MAX_SZAR).
Obsługiwane obrazy będą zapisywane w formacie PGM.
Szczegółowy opis formatu PGM można znaleźć w
oddzielnym opisie obrazy_format.pdf
(w wersji podstawowej programu można przyjąć, że komentarz w pliku PGM
może wystąpić tylko w 2 wierszu pliku).
Przykładowe obrazy w formacie PGM znajdują się w katalogu
/usr/local/air/info2/zadania/splot/obrazki
Moduł powinien realizować podane poniżej procedury i funkcje oraz działać zgodnie z przedstawionym opisem. Gotowy moduł należy połączyć z plikiem drivera (kont_p.o), a następnie przetestować działanie zaimplementowanych funkcji.
Deklaracja funkcji wykorzystywana w programieznajduje się w pliku nagłówkowym (funkcje_pgm2.h)
Do przechowywania obrazu wykorzystany jest rekord
TYPE
Tobraz=record
wymX,wymY:INTEGER;
max_szarosc:INTEGER;
piksele:ARRAY [1..MAXX,1..MAXY] of INTEGER;
end;
Deklaracja stałych maxX i maxY jest następująca:
CONST
MAXX=1000;
MAXY=1000;
Moduł powinien realizować następujące funkcje:
Korekcja gamma służy do nieliniowej zmiany jasności obrazu, zgodnie z następującym wzorem
G(x,y) = L(x,y)^gamma,
gdzie L(x,y) oznacza jasność punktu (x,y) w obrazie źródłowym, a G(x,y)
jasność punktu w obrazie wynikowym (UWAGA! Jasność G(x,y) i L(x,y) jest
unormowana, czyli zawiera się w przedziale [0,1]).
WSKAZÓWKA: Można wykorzystać funkcję potęgowania (pow(x,y)), w tym celu
trzeba do modułu dołączyć nagłówek
#include<math_p.h>
Rozmycie polega na uśrednieniu koloru w zadanym otoczeniu danego punktu.
Dla obrazu przedstawionego w postaci tablicy pikseli, których stopień jasności jest określony funkcją L(x,y), nowe wartości G[x,y] stopnia jasności wylicza się według wzoru: