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), który znajduje się na diablo w katalogu /usr/local/air/info2/zadania/splot/modul, a następnie przetestować działanie zaimplementowanych funkcji.
Plik nagłówkowy z deklaracją funkcji znajduje się tutaj
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:
Progowanie polega na klasyfikacji pikseli obrazu do jednej z dwóch klas: zbioru punktów czarnych lub zbioru punktów białych. Dla progu o wartości PROG, jasność punktów nowego obrazu określona jest wzorem:
G(x,y) = 0, dla L(x,y) <= PROG i G(x,y) = MAX_SZAR, dla L(x,y) > PROG,
gdzie L(x,y) oznacza jasność punktu (x,y) w obrazie źródłowym, a G(x,y)
jasność punktu w obrazie wynikowym.
Konturowanie polega na wyostrzaniu obrysów obiektów metodą gradientowa. Oznacza to, że po skonturowaniu piksele, które różnią się od otoczenia zostaną rozjaśnione, a piksele, które są podobne do otoczenia, przyciemnione. 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:
G(x,y) = |L(x+1,y) - L(x,y)| + |L(x,y+1) - L(x,y)|,
gdzie |z| oznacza wartość bezwzględną liczby z.