Informatyka 2 – Przetwarzanie obrazów

Transkrypt

Informatyka 2 – Przetwarzanie obrazów
Informatyka 2 – Przetwarzanie obrazów
Napisz program, który umożliwi użytkownikowi wczytanie do pamięci jednego lub dowolnej liczby obrazów w
formacie PGM, a następnie wykonanie na wybranym obrazie wybranej operacji.
Operacje na obrazach:
•
usunięcie wybranego z wczytanych wcześniej obrazów z pamięci,
•
zapisanie obrazu do nowego pliku o nazwie podanej przez użytkownika,
•
wyświetlenie informacji o parametrach obrazu (wymiary, skala szarości),
•
progowanie obrazu (jeden próg podawany przez użytkownika lub w połowie skali szarości),
•
progowanie obrazu na dwóch progach,
•
automatyczne progowanie obrazu,
•
odbicie obrazu w pionie lub w poziomie,
•
obrót obrazu o 90 lub 270 stopni,
•
obliczenie histogramu obrazu i zapisanie go do pliku o nazwie takiej jak wczytany obraz z dopiskiem -hist i
rozszerzeniu csv,
•
wygładzenie histogramu i wygenerowanie obrazu histogramu o nazwie takiej jak wczytany obraz z dopiskiem
-hist i rozszerzeniu pgm,
•
wykrycie krawędzi operatorem Sobela (w poziomie, pionie lub wszystkich kierunkach),
•
rozjaśnienie lub przyciemnienie obrazu o stały lub procentowy współczynnik podany przez użytkownika,
•
znalezienie wartości najjaśniejszego lub najciemniejszego piksela na obrazie,
•
dylatacja lub erozja obrazu binarnego,
•
rozmycie obrazu filtrem Gaussa,
•
wyostrzenie obrazu,
•
rozszerzenie zakresu jasności obrazu,
•
potęgowanie lub logarytmowanie obrazu z wykorzystaniem LUT,
•
negatyw,
•
zaszumienie obrazu szumem typu pieprz i sól (stopień zaszumienia podany przez użytkownika),
•
filtracja medianowa obrazu,
•
podwójne powiększenie rozmiaru obrazu z wykorzystaniem interpolacji medianowej,
•
wstawienie fragmentu jednego obrazu w drugi,
•
posortowanie obrazów rosnąco według powierzchni.
Do reprezentacji obrazu należy wykorzystać strukturę danych. Pamięć na tablicę pikseli oraz na histogram należy
alokować dynamicznie. Poszczególne operacje należy zaimplementować jako funkcje przyjmujące jako parametr
wskaźnik na strukturę obrazu oraz wszystkie niezbędne dane. Cały projekt należy rozłożyć na conajmniej 3 pliki –
main.c (program główny), pgm.h (deklaracje struktury obrazu i funkcji przetwarzających obrazy) i pgm.c (definicje
funkcji przetwarzających obrazy).
Funkcje przetwarzające obrazy nie powinny wykonywać jakichkolwiek operacji interakcji z użytkownikiem. Jeżeli taka
interakcja jest potrzebna należy ją zaimplementować w innym miejscu w programie i przekazywać pozyskane
parametry do funkcji.
W przypadku wczytywania dowolnej liczby obrazów, należy wykorzystać dynamiczną listę jedno lub dwukierunkową i
alokować pamięć na kolejno wczytywane obrazy.
Specyfikacja obrazu PGM:
http://netpbm.sourceforge.net/doc/pgm.html
(program powinien uwzględniać możliwość pojawienia się w pliku dowolnej liczby linii komentarzy)
Przykładowe obrazy:
http://student.mvlab.pl/pliki/obrazy-pgm/