GraphicsMagick
Octave will use GraphicsMagick for reading and writing your images (not plots, only if you are actually doing image processing). This means that the GraphicsMagick configuration you have on you system will limit what your Octave installation can do. Most systems will have it on their own repositories. Unfortunately, their configuration is not always the best for image analysis as it limits reading of images to 8-bit.
To solve the problem, GraphicsMagick needs to be rebuilt with the appropriate settings. See below for tracking dependencies and the reasoning behind each flag. Once done, the following commands should work to build GraphicsMagick.
./configure --with-quantum-depth=16 --enable-shared --disable-static --with-magick-plus-plus=yes make make check sudo make install
Quantum depth
The most common problem is the following warning when using imread()
:
warning: your version of GraphicsMagick limits images to 8 bits per pixel
The reason for this is that GraphicsMagick was compiled with --with-quantum-depth 8
. Possible values are 8, 16 or 32, each implememnting that limitation. See the INSTALL file on GraphicsMagick sourcefor an explanantion of this. There has bugs reported requesting package maintainers to compile it with higher values. You should not create a new bug, instead leave a comment on the already open bugs: Debian, Ubuntu, Fedora.
As versions with higher values are not available on the repositories, the solution is to compile it. Octave needs then to be recompiled to use the freshly compiled Magick++ library.
Magick++
Magick++ is the C++ application programming interface to GraphicsMagick. This is what Octave uses so you will need this when compiling GraphicsMagick. This will be enabled by default but if you don't have a C++ compiler installed (such as g++) GraphicsMagick will build just fine without a warning, just a small note during the run of configure.
The default is to disable shared libraries but that won't work with Octave. You will need to pass the --enable-shared
option. If you do not, Octave will give the following warning when running configure:
GraphicsMagick++ library fails tests. The imread function for reading image files will not be fully functional.
Dependencies
Compiling from source means tracking the dependencies yourself which may be a kind of painful. There's no wiki for GraphicsMagick so the following table hopes to makes things easier. Note however that this is the list of all dependencies and suggestions. For Octave purposes only, you definetely will not need all of these.
To start with you will obviously need the following
- a C compiler such as gcc
- a C++ compiler such as g++
- make
Main dependencies
These are the ones which support being enabled or disabled via the configure script options and are shown in the summary status at the end of the configure script run. You will need them at compile time.
Dependency | Debian Wheezy | Ubuntu Precise |
---|---|---|
BZLIB | libbz2-dev | libbz2-dev |
FlashPIX | ||
FreeType 2.0 | libfreetype6-dev | libfreetype6-dev |
Ghostscript | ghostscript | ghostscript |
Ghostscript-fonts | gsfonts | gsfonts |
JBIG | libjbig-dev | |
JPEG v1 | libjpeg8-dev | libjpeg-dev |
JPEG-2000 | libjasper-dev | libjasper-dev |
LCMS v2 | liblcms2-dev | liblcms2-dev |
ltdl | libltdl-dev | libltdl-dev |
LZMA | liblzma-dev | liblzma-dev |
PNG | libpng12-dev | libpng12-dev |
TIFF | libtiff5-dev | libtiff5-dev |
WMF | libwmf-dev | libwmf-dev |
X11 | libx11-dev libxext-dev libsm-dev | |
XML | libxml2-dev | libxml2-dev |
ZLIB | zlib1g-dev | zlib1g-dev |
- Trio is only needed/useful on certain archaic systems which lack secure vsnprintf variants.
- DPS has been deprecated and should not be used.
- Ghostscript library support is not recommended by GraphicsMagick on Unix type systems. Read their README.txt file.
- there are both v1 and v2 LCMSlibraries but GraphicsMagick only needs one of them.
Other dependencies
These other dependendies are easily added via a user-editable text file after building and installation. They are much more specific and most users will have no need for them.
Dependency | Debian Wheezy | Ubuntu Precise |
---|---|---|
dcraw | dcraw | dcraw |
dvips | texlive-base | texlive-base |
dot | graphviz | graphviz |
fig2dev | transfig | transfig |
gnuplot | gnuplot | gnuplot |
hp2xx | hp2xx | hp2xx |
html2ps | html2ps | html2ps |
lp | cups-client | cups-client |
lpr | cups-bsd | cups-bsd |
mpeg2decode | ||
mpeg2encode | ||
pgpv | pgpgpg | pgpgpg |
povray | ||
ra_ppm | radiance | radiance |
rawtorle | ||
scanimage | sane-utils | sane-utils |