Przetwarzanie obrazu - Politechnika Białostocka

Transkrypt

Przetwarzanie obrazu - Politechnika Białostocka
Politechnika Białostocka
Skrypt do pracowni specjalistycznej z przedmiotu
TECHNOLOGIE INTERNETOWE 4
Zadanie 4 – Przetwarzanie obrazu
opracował mgr inż. Grzegorz Kraszewski
BIAŁYSTOK 2009
1. Cel ćwiczenia
Ćwiczenie zapoznaje studentów z technikami przetwarzania obrazów i pisania własnych
filtrów obrazu w języku PHP.
2. Opis zadania
Przy publikowaniu zdjęć w Internecie niejednokrotnie zachodzi potrzeba zatarcia
pewnych danych personalnych obecnych na zdjęciu. Typowym przykładem może być
zatarcie wizerunku twarzy osoby, albo numeru rejestracyjnego samochodu. Treścią tego
zadania jest napisanie skryptu, który w sposób interaktywny pozwoli na dokonanie takich
zmian w obrazie. Najczęściej spotykanym sposobem zatarcia danych jest uśrednienie
wartości koloru prostokątami o bokach kilku do kilkunastu pikseli (tzw. mozaika). Tę
właśnie metodę należy zastosować.
Obrazek do obróbki powinien być wczytywany poprzez formularz. Dopuszczalną
szerokość obrazu należy ograniczyć do 800 pikseli, wysokość do 600 pikseli. Obrazki o
większych rozmiarach należy odrzucać, informując o tym użytkownika.
Następnie do obrazka należy dodać podziałkę i siatkę. Podziałka powinna znajdować się
przy górnej i lewej krawędzi obrazka i mieć działkę 20 pikseli, kreski podziałki powinny
być opisane liczbami. Kreski te powinny przedłużać się na siatkę kwadratową nałożoną
na oryginalny obrazek. Siatka powinna w możliwie niewielkim stopniu zamazywać
obrazek, a jednocześnie być czytelna na dowolnym kolorze obrazka. Dobrym sposobem
rozwiązania tego problemu jest siatka będąca negatywem oryginalnego obrazka
zmiksowana z nim samym z przezroczystością około 60 – 80%, sposób ten zawodzi
niestety w okolicach koloru szarego (składowe RGB 128, 128, 128). Innym sposobem
jest dodawanie pewnej stałej wartości (np. 40) do każdej ze składowych RGB o ile jest
ona mniejsza od 127, a odejmowanie tej wartości, jeżeli składowa jest większa od 127.
Pod obrazkiem wzbogaconym o podziałki i siatkę umieścić należy formularz. W
formularzu tym użytkownik może wprowadzić współrzędne prostokąta przeznaczonego
do zatarcia (lewy górny i prawy dolny róg) oraz rozmiary prostokąta zamazującej
mozaiki (w pikselach). Należy przeprowadzić kontrolę wprowadzonych wartości,
zamazywany prostokąt musi się w całości zawierać wewnątrz obrazka, a rozmiary
prostokąta mozaiki muszą być mniejsze lub równe rozmiarom prostokąta zamazywanego.
Po zatwierdzeniu danych skrypt przetwarza dane w zadanym prostokącie. Siatka mozaiki
startuje z lewego gónego rogu wskazanego prostokąta. Jeżeli rozmiary prostokąta do
zamazania nie są calkowitą wielokrotnością prostokąta mozaiki, to należy odpowiednio
prawą kolumnę i/lub dolny rząd mozaiki przyciąć. Dla każdego prostokąta mozaiki
sumujemy składowe RGB poszczególnych pikseli w tym prostokącie. Następnie
uzyskane sumy dzielimy przez ilość pikseli w prostokącie mozaiki. Otrzymanym w ten
sposób kolorem wypełniamy prostokąt mozaiki.
Efektem wyjściowym skryptu jest obrazek, w którym wybrany w formularzu prostokąt
jest zatarty mozaiką. Wyjściowy obrazek nie powinien oczywiście zawierać siatki ani
podziałki. Formatem wyjściowym powinien być PNG, niezależnie od formatu obrazka
wejściowego.
Ze względu na to, że wejściowy obraz jest przetwarzany dwukrotnie, wskazane jest jego
zbuforowanie na dysku w formacie GD2 (nie zapominając o usunięciu pliku po
zakończeniu przetwarzania, nie nastąpi to automatycznie).
3. Literatura
1.
2.
3.
4.
Materiały z wykładów (http://teleinfo.pb.edu.pl/krashan/techint4.html).
Dokumentacja języka PHP (http://www.php.net).
Dokumentacja HTML (http://www.w3.org/TR/html401/).
Opis protokołu HTTP (http://www.ietf.org/rfc/rfc2616.txt).

Podobne dokumenty