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).