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 poleceń (tylko wersja dla Linuksa)


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

Instalacja

edytuj

Pobranie kodu źródłowego

edytuj
git clone git://github.com/schani/mathmap.git
cd mathmap
git submodule init
git submodule update

Wymagane pakiety

edytuj
  • 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

Kompilacja wtyczki

edytuj
make
sudo make install

Jeśli doinstalowywałeś jakieś pakiety to pamiętaj aby przed powtórnym wywołaniem make:

make clean


Uruchomienie

edytuj

Z linii poleceń

edytuj

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


Jako wtyczkę do GIMPA

edytuj

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.

Graficzny kompozytor filtrów

edytuj

W wersji 2.6 gimpa polskiej kompozytora wywołujemy okno dialogowe wtyczki poprzez Menu/Filtry/Ogólne/MathMap/MathMap i otwieramy zakładkę Composer

Programowanie tekstowe

edytuj

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

Programowanie

edytuj

Programy w języku Mathmap nazywane są filtrami.

Wewnętrzny język programowania

edytuj

Wstęp

edytuj

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 oznaczające 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].

Układy współrzędnych obrazu

edytuj

Są 2 układy współrzędnych:

  • kartezjański: xy
  • biegunowy (polarny): ra



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 bezwzglę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 bezwzglę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

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.

Efekty działania

edytuj

Więcej na:

Licencja

edytuj

Jest to wolne oprogramowanie (ang. Free Software) na licencji GNU General Public Licence.

Źródła

edytuj
  1. The MathMap Image Processing Application by Mark Probst
  2. MathMap in Gimp Plugin Registry
  3. Opis języka Mathmap
  4. tagged tuples -Mathmap doc
  5. Omówienie języka Mathmap