Inteligentne zmniejszanie zdjęć

Niektóre zadania nawet mistrz wśród edytorów graficznych – Adobe Photoshop – wykonuje z gracją słonia. Do takich przypadków należy zmniejszanie obrazów bitmapowych. A szkoda, bo fotografie wciąż trzeba powiększać, pomniejszać lub rozciągać. Zdjęcie do ramki na biurko powinno mieć inne wymiary niż to przeznaczone na odbitkę w fotolabie, do galerii internetowej czy po prostu do obejrzenia na różnych monitorach. Rozwiązaniem problemu mogłaby być inteligentna zmiana wymiarów, która pomogłaby w dopasowywaniu rozmiaru obrazka do każdego sposobu prezentacji. Najprostsze metody, czyli kadrowanie i skalowanie, niestety często zawodzą. Podczas kadrowania oryginału program obcina to, co wystaje poza zadane wymiary.
Porównanie trzech metod zmiany rozmiaru obrazka
Porównanie trzech metod zmiany rozmiaru obrazka

Dotychczasowa metoda: Skalowanie szybko osiąga granice swych możliwości

Jeśli chodzi o skalowanie, Photoshop oferuje dwie metody, które zapewniają akceptowalną jakość: interpolację dwuliniową oraz dwusześcienną. Dodajmy, że zastosowanie metody dwusześciennej przy powiększaniu daje wyraźnie lepsze efekty.

Cyfrowe obrazy składają się z pikseli. Filtr skalujący musi więc podczas powiększania wyliczyć parametry nowych pikseli. Metoda dwuliniowa wykorzystuje tylko wartości pikseli bezpośrednio sąsiadujących. Efektem tego jest wyraźny spadek ostrości powiększonych obrazów. Skalowanie dwusześcienne uwzględnia natomiast szerszy kontekst pikseli i przypisuje im różne znaczenie w zależności od dalszego lub bliższego położenia. Dzięki temu nowe, wyliczone na takiej podstawie piksele nie powodują nieostrości na zdjęciu. Skalowanie okazuje się jednak metodą niewystarczającą, gdy zmieniamy proporcje boków zdjęcia. W takim prz ypadku ulega ono zniekształceniu, co fatalnie wpływa na wygląd

obrazka.

Nowa metoda: Usunąć nieistotne, pozostawić resztę

Dotychczas stosowane metody zawodzą, bo nie uwzględniają zawartości obrazka. W wypadku Seam Carving jest inaczej. Tu podstawowa zasada brzmi: usunąć to, co nieistotne, pozostawić całą resztę. Program bazujący na carvingu analizuje więc zawartość fotografii, aby stwierdzić, co można wyrzucić, a czego lepiej nie ruszać. Wbrew pozorom sama analiza jest mniej skomplikowana niż proces rozpoznawania twarzy. Wystarczy, gdy program stwierdzi, w których miejscach dużo się dzieje, a gdzie jest spokojnie. “Dzianie się” oznacza krawędzie, linie i struktury. Najpierw potrzebny jest zatem algorytm, który takie miejsca na fotografii wyśledzi. Następnie przypisuje on im wysokie wartości, a gładkim powierzchniom – niskie. W programie Seam Carving GUI (na płycie dołączonej do tego numeru) użytkownik ma do wyboru aż pięć algorytmów.

Przypisane wartości stanowią podstawę do wykonania następnego kroku: wykreślenia mapy wartości. Nie wystarczy ochronić krawędzie poprzez nadanie im wysokich wartości. Również obiekty, które znajdują się pomiędzy tymi krawędziami, powinny pozostać nietknięte. Dlatego program do carvingu wykonuje następną operację, w której podnosi wartości nadane pikselom znajdującym się w pobliżu krawędzi. W efekcie, tak jak na naszym przykładowym zdjęciu ze słoniami, niebo ma najniższe wartości, trochę więcej – trawa, na następnym miejscu są zarośla, a najwięcej punktów dostały słonie. Im więcej szczegółów, tym wyższa wartość.

Seam Carving w akcji

Zdjęcie przed operacją
Zdjęcie przed operacją

Orygniał: Fotografia ze słoniami ma szerokość 850 pikseli. Dzięki Seam Carvingowi ma ona być zmniejszona do 550 pikseli.

Analiza obrazu w trzech krokach

Wykrywanie krawędzi
Wykrywanie krawędzi

1. Wykrywanie krawędzi: Program nakłada na zdjęcie filtr przypisujący krawędziom wysokie wartości.

Mapa
Mapa

2. Mapa: Algorytm przypisuje wszystkim pikselom w pobliżu krawędzi wyższe wartości.

Ścieżki
Ścieżki

3. Ścieżki: Program wykreśla 300 “szwów” o niskich wartościach i kasuje położone na nich piksele.

Obraz po zmiejszeniu


Obraz po zmiejszeniu

Rezultat: Po wycięciu przez program 300 wyliczonych ścieżek okazało się, że najważniejsze motywy pozostały nietknięte.

Sztuczna inteligencja: Seam Carving krok po kroku usuwa piksele

Teraz program do carvingu ma już przygotowane wszystkie dane umożliwiające stopniowe zmniejszenie pliku. Aby z 600 pikseli przejść na 599, program usuwa pionowy rząd pikseli o najniższej przypisanej wartości. Przy tym nie kreśli prostej linii, tylko wyszukuje sobie ścieżkę (seam dosłownie znaczy szew) z pikseli o najniższych wartościach. Program zaczyna na przykład od piksela znajdującego się przy dolnej krawędzi i sprawdza wartości trzech pikseli sąsiadujących z nim od góry. Zaznacza ten o najniższej wartości i, poczynając od niego, przechodzi do następnej linii, aż powstanie ścieżka prowadząca na samą górę. Dla każdego piksela, o który ma się zmniejszyć obrazek, program oblicza nową ścieżkę, po czym ją usuwa. Dzięki temu istotne elementy pozostają nietknięte, ale przysuwają się do siebie. Metoda ta działa dokładnie tak samo w przypadku poziomych ścieżek, prowadzących z lewej strony na prawą. Seam Carving może być również stosowany do powiększania zdjęć. W takim przypadku program tak długo kopiuje ścieżki oryginału, aż uzyska właściwą wielkość.

Nowatorska metoda ma też słabą stronę. W przeciwieństwie do skalowania, mocno zmienia zawartość obrazka. Użytkownicy mogą jednak na przykład zaznaczać w programie do carvingu wybrane obszary i przypisywać im niskie wartości, tak aby podczas skalowania obszary te po prostu znikły. Można też inaczej: zaznaczyć fragmenty, które mają mieć wysokie wartości, tak by na pewno zostały one zachowane.

Gdy twórcy Seam Carvingu w zeszłym roku przedstawili metodę, wykonali na zdjęciu mapę wszystkich ścieżek, by pokazać w czasie rzeczywistym, jak można dowolnie powiększać i pomniejszać fotografie. Teraz na konferencji Siggraph pokażą, że Seam Carving może być stosowany nawet na plikach wideo. Zaraz po tym, jak metoda Seam Carving została zaprezentowana, jej entuzjaści napisali wykorzystujące ją programy. Photoshop CS4 już dysponuje odpowiednim mechanizmem do Seam Carvingu.

Narzędzia

Seam Carving GUI:Wygodny program, dający dobre rezultaty skalowania obrazów

Arachne: Prosty w obsłudze program do Seam Carvingu

Liquid Rescale: Wtyczka carvingowa do opensourceowego programu GIMP

Rsizr: Interaktywna strona Web 2.0 z przyjaznym software’em do Carvingu rsizr.com

Seam Carving Demo: Aplikacja umożliwiająca korzystanie online z prostego Seam Carvingu

Wykład o Seam Carvingu: Wideo prezentujące sposób działania Seam Carvingu