GIMP/Programowanie/Mathmap
Mathmap jest to narządzie do tworzenia i przetwarzania obrazów. [1] Może być użyte jako :
- wtyczka ( ang. plugin) do Gimpa
- narzędzie do pracy z linii komend ( tylko wersja dla linuxa)
Sposoby użycia wtyczki:[2]
- jako jeden z wielu filtrów Gimpa
- jako narzędzie do tworzenia nowych filtrów :
- z użyciem graficznego Composer'a ( podobny do Quartz Composer dla MacOS X lub Yahoo! Pipes).
- z użyciem wbudowanego języka programowania[3]
Opracowane na podstawie:
- OS : Linux
- dystrybucja Ubuntu wersja 10.04 LTS - Lucid Lynx
- jądro 2.6.32-31-generic x86_64
- GIMP 2.6.8 wersja wersja polska
- mathmap-1.3.4
Spis treści |
[edytuj] Instalacja
[edytuj] Pobranie kodu źródłowego
git clone git://github.com/schani/mathmap.git cd mathmap git submodule init git submodule update
[edytuj] Wymagane pakiety
- The GIMP 2.4 ( także libgimp2.0-dev )
- GSL (GNU Scientific Library),
- GSL CBLAS
- gsl bin
- fftw ( version 3)
- libgtksourceview
- libjpeg, libpng, libgif (preferowany) lub libungif
- gettext
- bison
- flex
- clisp ( także clisp-dev )
- doxygen
- libtool
Na Ubuntu także pakiety devel są wymagane
[edytuj] Kompilacja wtyczki
make sudo make install
Jeśli doinstalowywałeś jakieś pakiety to pamiętaj aby przed powtórnym wywołaniem make :
make clean
[edytuj] Uruchomienie
[edytuj] Z linii komend
Wywołaj :
mathmap --help
aby uzyskać pomoc.
Przykład użycia :
mathmap -s256x256 'filter gray () grayColor(0.5) end' out.png
To polecenie tworzy plik out.png o wymiarach 256x256 o kolorze w połowie szarym
[edytuj] Jako wtyczkę do GIMPA
W wersji 2.6 gimpa polskiej wtyczkę wywołujemy poprzez Menu/Filtry/Ogólne/MathMap gdzie mamy do wyboru poszczególne filtry lub wspólne okno dialogowe.
[edytuj] Graficzny kompozytor filtrów
W wersji 2.6 gimpa polskiej kompozytora wywołujemy okno dialogowe wtyczki poprzez Menu/Filtry/Ogólne/MathMap/MathMap i otwieramy zakładkę Composer
[edytuj] Programowanie tekstowe
W wersji 2.6 gimpa polskiej kompozytora wywołujemy okno dialogowe wtyczki poprzez Menu/Filtry/Ogólne/MathMap/MathMap i otwieramy zakładkę Expressions. Możemy tu wpisywać swoje filtry lub wczytywać i edytować istniejące ( pliki z rozszerzeniem mm ).
[edytuj] Programowanie
Programy w języku Mathmap nazywane są filtrami.
[edytuj] Wewnętrzny język programowania
[edytuj] Wstęp
Składnia wygląda następująco :
options filter name (user_values) expression end
Poszczególne elementy oznaczają :
- options = opcje filtra ( mogą nie występować)
- filter = słowo kluczowe oznaczające początek definicji ( zawsze musi być)
- user_values = parametry filtru ( mogą nie występować)
- expression = wyrażenie opisujące co filtr robi
- end = słowo kluczowe oznaczjace koniec definicji( zawsze musi być)
Zasada działanie filtra jest prosta : dla każdego piksela obrazu oblicza kolor, czyli ostatnim elementem w wyrażeniu jest zawsze kolor piksela.
Każda wartość jest krotką (ang. tuple), tzn. listą wartości poprzedzoną znacznikiem ( ang. tag). [4]
Na przykład rgba:[1,0,0,1] oznacza kolor czerwony o zerowej przeźroczystości ( ang. fully opaque color red )
Pojedyncze liczby mogą być zapisywane normalnie, nie jako krotki. Na przykład 3.1415 odpowiada nil:[3.1415].
[edytuj] Układy współrzędnych obrazu
Są 2 układy współrzędnch :
- kartezjański : xy
- biegunowy ( polarny) : ra
[edytuj] Kolor
Mamy dwa rodzaje koloru :
- rgba ( RGBA Color ), np. rgba:[1,0,0,1] oznacza kolor czerwony o zerowej przeźroczystości ( ang. fully opaque color red ).
- hsva (HSVA Color )
Jednolity kolor RGB obrazu :
filter blue () rgbColor(0, 0, 1) end
Gradient szary :
proporcjonalny do wartości x :
filter gray () # x is changing from -1 to 1 grayColor(x) # each color component is proportional to x end
proporcjonalny do bezwględnej wartości x :
filter gray2 () p=abs(x); # x is changing from -1 to 1 grayColor(p) # each color component is proportional to abs(x) end
proporcjonalny do bezwględnej wartości sin(x*pi) :
filter sin () grayColor(abs(sin(x*pi))) end
Inna wersja z przeskalowaniem zakresu zmiennej "x" z [-1,1] do [0,1] :
filter gray_gradient () grayColor(scale(x, -1, 1, 0, 1)) end
to samo inaczej zapisane :
filter gray_gradient () grayColor((x+W/2)/W) end
proporcjonalny do odległości piksela od centrum =( 0,0) bez powtórzeń :
filter gray_radius () grayColor(r) # color component is proportional to radius end
proporcjonalny do odległości piksela od centrum =( 0,0) z powtórzeniami :
filter rmod () grayColor((r%0.4)/0.4) end
proporcjonalny do kąta piksela ( a = angle ) :
filter gray_angle () # angle in radians : (0 <= a < 2*pi) # polar coordinate of pixel = ra p=scale(a, -2*pi, 2*pi, -1, 1); # map a from [-2pi,2pi] to [-1,1] range grayColor(p) # color component is proportional to angle end
[edytuj] Obraz
Aby stworzyć nowy obraz : cały czerwony
filter red () rgbColor(1, 0, 0) end
Jest to filtr o nazwie "red". Używa wbudowanej funkcji rgbColor.[5]
Filtr ( wyrażenie czyli ang. expression) możemy zapisać jako plik z rozszerzeniem mm : red.mm w podkatalogu examples lub
~/.gimp-2.6/mathmap/expressions
Jeśli chcemy zmodyfikować istniejący obraz :
filter ident (image in) in(xy) end
Ten filtr nic nie robi ( ident), ale pokazuje najprostszy filtr operujący na istniejącym już obrazie.
[edytuj] Efekty działania
Więcej na :
[edytuj] Licencja
Jest to wolne oprogramowanie ( ang. Free Software) na licencji GNU General Public Licence.
