GIMP/Programowanie/Mathmap

Z Wikibooks, biblioteki wolnych podręczników.


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



Kolor[edytuj]

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
Obraz[edytuj]

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