Ostatnio w światku IT zawrzało od pewnego rewolucyjnego algorytmu, o
którym poinformowało wiele stron związanych z grafiką , a te informacje
zostały wykopane dziesiątki razy na digg'u, i nie ma cię co dziwić, bo
seam carving ("wycinanie w szwach"), bo o nim mowa, jest naprawdę
rewolucyjna metodą zmiany wielkości obrazów bitmapowych. A teraz mamy
do dyspozcji wolną implementacje tego algorytmu w postaci plugina do
gimpa - LiquidRescale.Seam cariving jest
algorytmem zmiany rozmiaru obrazów, który opracowali panowie Shai
Avidan and Ariel Shamir.
Algorytm tez zmienia rozmiary obrazu nie przez skalowanie czy
obcinanie, ale przez inteligentne usuwanie (lub dodawanie) pikseli z
obrazu, które bierze pod uwagę znaczenie (ważność). Znaczenie tych
pixeli jest ogólnie szecz biorąc mierzone przez ich kontrast w
porównianiu się z sąsiednimi. Autorzy wyszli z ałożenia, że obszary
obrazu, na których występują duże kontrasty są bardziej znaczące niż
mało kontrastowe (w swoim obrębie) tło, co za tym idzie, przy
skalowaniu obrazu, obszary o niskim kontraście można uznać za "szwy" i
wycinać z nich piksele przy zmniejszaniu, oraz dodawać w te miejsca
dodatkowe piksele w przypadku powiększania.
Procedura działania:
sporządzenie mapy energetycznej (obszary o wysokiej
energii, to te, na których jest wiele detali)
znalezienie linii łączących pikseli (szwów) o najmniejszej
energii z wszystkich możliwych linii.
usunięcie tego szwu, bądz dodanie dodatkowych pikseli
wzdłuż tej linii.
rekurencujne powtórzenie, aż do uzyskania żądanego rozmiaru.
Zastosowanie:
Metodę seam carving można stosować do zmiany rozmiaru i proporcji zdjęć
i obrazów bitmapowych, tak do powiększania (poszerzania) jak i do
zmniejszania (zwężania), oraz do usuwania wybranych obszarów obrazu.
Implementacja w postaci pluginu liquidrescale pozwala na użycie warstw
do wymaskowania obszarów, które ni powinny zostać naruszone, oraz na
wskazanie również za pomocą odpowiednio przygotowanej warstwy obszarów
przeznaczonych do usunięcia podczas zwężania obrazu. Seam carving
zniekształca rzeczywistość w poddanych mu obrazach w dość istotny
sposób, więc może się nie przydać do obróbki zdjęć z domowego albumu,
ale łatwo sobie wyobrazić sytuację, w której przyda się bardzo i będzie
praktycznie niezastąpiony.
Wyobraźmy sobie że przygotowujemy ulotke biura podruży, mamy do
dyspozycji zdjęcie morza, na którym po lewej plaża a po
prawej na
przykład żaglówka, w środku jest woda i niebo. Mogli byśmy w
tym
miejscu umieścić treść ulotki, ale jest tam zbyt mało miejsca.... W tym
przypadku plugin liquidrescale może pomóc nam poszerzyć całe zdjęcie
kosztem tego obszaru, bez zniekształcania plaży i żaglówki. Jeśli
natomiast tło w naszej ulotce miało by przeszkadzający element w
środku, możemy przez zwężanie usunąć go z obrazu. W jednym i drugim
wypadku dostaniemy efekty lepszy niż byli byśmy w stanie osiągnąć przez
ręczne stosowanie wycinania, wklejania i klonowania.
Seam Carving akcji
Jak działa ten czarodziejski algorytm można zobaczyć na filmie na
stronie www.seamcarving.com, lub spróbować samemu z dowolnym zdjęciem w interkatywnej
prezentacji na stronie: swieskowski.net.
Przykład użycia plugina liquidrescale w gimpie
Plugin można pobrać ze strony liquidrescale.wikidot.com.dla
systemów linux i windows, tam też znajdziecie opis instalacji. Plugin
działa, ale niestety jeszcze nie została napisana do niego pełna
instrukcja (dział tutorial jest jeszcze "under construction") Więc
przygotowałem mini tutorial na konkretnym przykładzie.
oryginalny obraz, rysunek mojego autorstwa 600x757
pikseli.
Obraz porzerzony zwykłym algorytmem skalowania do rozmiaru
900x757
obraz poszerzony za pomocą liquidrescale bez maskowania do
rozmiaru 900x757
niestety sam plugin nie poradził sobie za dobrze ustalając ważność za
pomocą mapy energii. Uda piratki mają mało kontrastową powierzchnię,
więc także tamtędy przebiegła linia o najmniejszej energii, traktując
uda piratki jak dieta fast food.
(Sorry Dorka, to nie ja tylko algorytm Cie tak załatwił... wiem, że
wiesz, że wiem, że tak nie
wyglądają twoje uda :-) )
mamy także, jak pisałem wyżej możliwość zaingerowania w
proces oceny wazności tworząc dodatkową warstwę, której jasność
decyduje o ustaleniu wartości dla mapy energii. Przygotowałem więc
dodatkową warstwę, jak widac poniżej, i wskazałem ją w oknie pluginu
liquidrescale jako feature
perservation region:
I oglądamy efekt działania algorytmu obok efektu zwykłego
skalowania:
widać różnicę między działaniem metody seam carving, a zwykłym
skalowaniem. Widać także, że nie zawsze można pozwolić algorytmowi
działać automatycznie, oraz to, że co by nie robić, to skośne linie na
obrazie pewnie i tak ucierpią ("złamany" rapier i pistolet Piratki,
oraz falujące maszty sżaglowca).
Na koniec przykład zastosowania zwężania za pomocą liquid
rescale. Tutaj także zastosowałem maskę, tym razem jako parametr dla feature discard selection
chodziło dokładnie o to, by sprawić żeby ręka znikła przy zawężaniu.
Oto okno plugino podczas wykonywania tej operacji (widać mniej więcej
jak wyglądała warstwa-maska) i efekt "wycinania szwów", do których
zadeklarowałem obszar ręki Piratki.
można zauważyć tutaj, że po usunięciu obszaru z obrazu może zostać po
nim ślad w postaci krawędzi oddzielającej obszary, będące niegdyś po
obu stronach usuwanego obszaru. jesli tekstura była by podobna, nie
stanowilo by to dużego problemu, ale akurat tutaj został cień po ręce -
taki dobrałem przykład.
Mam nadzieję, że przybliżyłem wam działanie tego algorytmu i zachęciłem do zainstalowania sobie pluginu liquidrescale.