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

  1. 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)
  2. przetworzyć obraz przy pomocy procedur zawartych w module, odpowiednio do zadanych opcji
  3. 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,
  4. 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ć),
  5. 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.