AiR - Informatyka 2
Zadanie 3 - przetwarzanie obrazów PGM część 2
Wymagania wstępne:
Parametry wywołania programu, uruchamianie programów z poziomu Pascala
przy pomocy funkcji SYSTEM i POPEN.
Tematem ćwiczenia jest napisanie programu wykorzystującego stworzony
w poprzednim zadaniu moduł obsługi
obrazów rastrowych PGM.
Program w wersji podstawowej powinien
- wczytać do tablicy w pamięci obraz z pliku wejściowego .pgm o nazwie zadanej argumentem wywołania -i, bądź ze standardowego wejścia (pliku INPUT) jeśli nazwa pliku będzie podana jako "-" (brak opcji -i w wywołaniu programu stanowi błąd)
-
przetworzyć obraz przy pomocy procedur zawartych w module, odpowiednio do zadanych opcji
- -n - negatyw
- -r - rozmycie
- -g gamma - korekcja z wartoscia gamma
-
jeśli zadano opcję -d i zarówno obrazy wejściowy jak i wynikowy są przechowywane w plikach, to za pomocą funkcji SYSTEM wyświetlić te obrazy programem "display" do wizualnej oceny wykonanej transformacji,
-
zapisać przetworzony obraz do pliku .pgm o nazwie zadanej argumentem wywołania za opcją -o, bądź na standardowym wyjściu (pliku OUTPUT) jeśli nazwa pliku będzie podana jako "-" (brak opcji -o w wywołaniu programu oznacza, że obrazu wynikowego nie należy nigdzie zapisywać),
- zakończyć pracę.
Przykłady
Następujące wywołanie programu powinno spowodować wyliczenie negatywu obrazu z pliku obr1.pgm i wypisanie obrazu wynikowego na wyjściu:
splot -i obr1.pgm -n -o -
Poniższe wywołanie powinno wyświetlić obraz z pliku obr2.pgm, następnie wykonać
konturowanie, wyświetlić obraz wynikowy, oraz zapisać ten obraz na pliku obr2_kontur.pgm:
splot -d -r -o obr2_rozmyty.pgm -i obr2.pgm
Wywołanie poniżej powinno dokonać korekcji obrazu otrzymanego na standardowym wejściu
z wartością parametru gamma 2.2 i zapisanie obrazu wynikowego w pliku obr3_prog.pgm
splot -g 2.2 -i - -o obr3_prog.pgm
Przykładowy program do analizy argumentów wywołania znajduje się
w pliku
/usr/local/air/info2/zadania/splot/splot_args_mech.p,
z kolei w katalogu
/usr/local/air/info2/zadania/splot/argumenty
można znaleźć więcej przykładów związanych z użyciem parametrów wywołania.
Uwaga: Do konwersji zmiennej napisowej do liczby rzeczywistej
można wykorzystać funkcję atof, którą należy zadeklarować
w programie jako
function atof(s:string):real;external c;
Rozszerzenia programu
Rozbudować moduł o procedurę generowania histogramu obrazu
oraz dodać do programu opcję -h, służącą do uruchomienia tej procedury.
Do wyświetlenia histogramu można użyć procedury POPEN oraz skryptu
/usr/local/air/info2/zadania/splot/modul/histogram.pl,
który rysuje wykres na podstawie otrzymanych na standardowym
wejściu danych - liczb będących kolejnymi wartościami funkcji histogramu.
Przykład wykorzystania POPEN można znaleźć na diablo
w katalogu
/usr/local/air/sunpc/examples/pproc.
Histogram
Histogram jest sposobem wizualizacji rozkładu danych.
W przypadku obrazów bitmapowych w odcieniach szarości jest to funkcja przypisująca
każdemu z odcieni szarości wartość równą liczbie pikseli obrazu o danym odcieniu.
Poniżej pokazano przykład histogramu dla obrazu oko.png.