Introduction
Lensfun est un projet relativement récent qui s’est appuyé sur PTLens qui est devenu propriétaire.
Il permet de faire des corrections géométriques de nos optiques. C’est, bien sûr un logiciel Libre, en ligne de commande. Cela dit, il est possible de l’utiliser au travers d’UfRAW à condition de compiler ce dernier avec l’option "Lensfun".
Environnement - Versions
OS : Mandriva Linux 2009.1 / Noyau : 2.6.31.5 / KDE 4.3.4 / Qt 4.5.3
GIMP 2.6.7
UfRAW 0.16
Lensfun 0.2.4
Commençons donc par Lensfun :
Après avoir téléchargé les source et les avoir extraites dans le répertoire de votre choix, allons dans le répertoire de Lenfun ainsi créé en console.
En tant qu’utilisateur, on va lancer le script configure en indiquant l’emplacement final d’installation via la commande suivante :
./configure --prefix=/usr
[phi___@localhost lensfun-0.2.4]$ ./configure --prefix=/usr
Compiling on host posix.x86_64 for target posix.x86_64 (tune for AMD Phenom(tm) 9950 Quad_Core Processor)
Checking if compiler supports -fvisibility=hidden ... Yes
Checking if compiler supports -Wno-non-virtual-dtor ... Yes
sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `gcc -c conftest.c -o conftest.o -mtune=AMD Phenom(tm) 9950 Quad_Core Processor >/dev/null 2>&1'
Checking if compiler supports -mtune=AMD Phenom(tm) 9950 Quad_Core Processor ... No
Checking for GNU Make >= 3.81 ... 3.81, OK
Checking for makedep >= 0.1.0 ... FAILED
Checking for Doxygen >= 1.5.0 ... 1.5.8, OK
Checking for library glib-2.0 >= 2.0 ... 2.20.1, OK
Checking for library libpng >= 1.0 ... 1.2.35, OK
Checking for library zlib ... OK
Checking for header file regex.h ... OK
Not changed: include/config.h
Not changed: config.mak
Not changed: build/PKGBUILD
Not changed: build/lensfun.spec
--------------------------------------------------------------------
Default build mode: release
Build doxygen documentation: yes
Use the pre-installed makedep: no
Target directory for binaries: /usr/bin
Target directory for data files: /usr/share/lensfun
Target directory for libraries: /usr/lib64
Target directory for include files: /usr/include
Target directory for documentation: /usr/share/doc/lensfun-0.2.4
--------------------------------------------------------------------
[phi___@localhost lensfun-0.2.4]$
Puis pour finir, on installe Lensfun en root avec la commande suivante :
make install
[root@localhost lensfun-0.2.4]# make install
INSTALL out/posix.x86_64/release/liblensfun.so to /usr/lib64/
INSTALL out/posix.x86_64/release/liblensfun.so.0.2.4 to /usr/lib64/
INSTALL out/posix.x86_64/release/liblensfun.so.0 to /usr/lib64/
INSTALL include/lensfun/lensfun.h to /usr/include/
INSTALL out/posix.x86_64/release/lensfun.pc to /usr/lib64/pkgconfig/
INSTALL data/db/6x6.xml to /usr/share/lensfun/
INSTALL data/db/compact-canon.xml to /usr/share/lensfun/
INSTALL data/db/compact-casio.xml to /usr/share/lensfun/
INSTALL data/db/compact-fujifilm.xml to /usr/share/lensfun/
INSTALL data/db/compact-konica-minolta.xml to /usr/share/lensfun/
INSTALL data/db/compact-leica.xml to /usr/share/lensfun/
INSTALL data/db/compact-nikon.xml to /usr/share/lensfun/
INSTALL data/db/compact-olympus.xml to /usr/share/lensfun/
INSTALL data/db/compact-panasonic.xml to /usr/share/lensfun/
INSTALL data/db/compact-pentax.xml to /usr/share/lensfun/
INSTALL data/db/compact-ricoh.xml to /usr/share/lensfun/
INSTALL data/db/compact-sony.xml to /usr/share/lensfun/
INSTALL data/db/generic.xml to /usr/share/lensfun/
INSTALL data/db/rf-leica.xml to /usr/share/lensfun/
INSTALL data/db/slr-canon.xml to /usr/share/lensfun/
INSTALL data/db/slr-contax.xml to /usr/share/lensfun/
INSTALL data/db/slr-konica-minolta.xml to /usr/share/lensfun/
INSTALL data/db/slr-nikon.xml to /usr/share/lensfun/
INSTALL data/db/slr-olympus.xml to /usr/share/lensfun/
INSTALL data/db/slr-pentax.xml to /usr/share/lensfun/
INSTALL data/db/slr-samsung.xml to /usr/share/lensfun/
INSTALL data/db/slr-schneider.xml to /usr/share/lensfun/
INSTALL data/db/slr-sigma.xml to /usr/share/lensfun/
INSTALL data/db/slr-sony.xml to /usr/share/lensfun/
INSTALL data/db/slr-tamron.xml to /usr/share/lensfun/
INSTALL data/db/slr-tokina.xml to /usr/share/lensfun/
INSTALL data/db/slr-ussr.xml to /usr/share/lensfun/
INSTALLDIR out/posix.x86_64/release/docs/manual/ to /usr/share/doc/lensfun-0.2.4/manual/
INSTALL README to /usr/share/doc/lensfun-0.2.4/
INSTALL docs/lgpl-3.0.txt to /usr/share/doc/lensfun-0.2.4/
INSTALL docs/gpl-3.0.txt to /usr/share/doc/lensfun-0.2.4/
INSTALL docs/cc-by-sa-3.0.txt to /usr/share/doc/lensfun-0.2.4/
[root@localhost lensfun-0.2.4]#
Voila, Lensfun est opérationnel et nous allons pourvoir compiler UfRAW avec l’option Lensfun.
Compilation d’UfRAW
Tout comme Lensfun, on va télécharger les sources d’UfRAW et les décompresser.
Comme l’indique la documentation, nous auront besoin de passer une option au script configure :
./configure --with-lensfun --enable-contrast
[phi___@localhost ufraw-0.16]$ ./configure --with-lensfun --enable-contrast --prefix=/usr
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking dependency style of g++... gcc3
checking how to run the C preprocessor... gcc -E
checking for a BSD-compatible install... /usr/bin/install -c
checking for ranlib... ranlib
checking for pod2man... pod2man
checking for _LARGEFILE_SOURCE value needed for large files... no
checking for gcc option to support OpenMP... unsupported
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for GLIB... yes
checking for LCMS... yes
checking for GTKBASE... yes
checking for GTK... yes
checking for gtk_image_view_damage_pixels... yes
checking for GIMP... yes
checking for GIMP_2_6... yes
checking for CINEPAINT... yes
checking for library containing getopt_long... none required
checking for library containing pow... -lm
checking for canonicalize_file_name... yes
checking for memmem... yes
checking for deflate in -lz... yes
checking for BZ2_bzReadOpen in -lbz2... yes
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking jpeglib.h usability... yes
checking jpeglib.h presence... yes
checking for jpeglib.h... yes
checking for jpeg_CreateCompress in -ljpeg... yes
checking for LIBPNG... yes
checking tiffio.h usability... yes
checking tiffio.h presence... yes
checking for tiffio.h... yes
checking for TIFFSetErrorHandler in -ltiff... yes
checking for CFITSIO... no
No package 'cfitsio' found
checking fitsio.h usability... no
checking fitsio.h presence... no
checking for fitsio.h... no
checking for EXIV2... yes
checking for LENSFUN... yes
checking locale.h usability... yes
checking locale.h presence... yes
checking for locale.h... yes
checking for LC_MESSAGES... yes
checking libintl.h usability... yes
checking libintl.h presence... yes
checking for libintl.h... yes
checking for ngettext in libc... yes
checking for dgettext in libc... yes
checking for bind_textdomain_codeset... yes
checking for msgfmt... /usr/bin/msgfmt
checking for dcgettext... yes
checking if msgfmt accepts -c... yes
checking for gmsgfmt... /usr/bin/msgfmt
checking for xgettext... /usr/bin/xgettext
checking for catalogs to be installed... ca cs da de es fr it ja ko nb nl pl pt ru sr sr@latin sv zh_CN
checking whether to install mime types... no
checking whether to build extras... no
checking whether to enable DST correction for file timestamps... no
checking whether to enable the contrast setting option... yes
checking whether to enable hot pixel elimination... no
checking whether to enable 'None' interpolation... no
configure: creating ./config.status
config.status: creating Makefile
config.status: creating icons/Makefile
config.status: creating po/Makefile.in
config.status: creating ufraw-setup.iss
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
config.status: executing default-1 commands
configure: ====================== summary =====================
configure: build GTK GUI: yes
configure: build GIMP plug-in: yes
configure: build CinePaint plug-in: yes
configure: EXIF support using exiv2: yes
configure: JPEG support: yes
configure: PNG support: yes
configure: FITS support: no
configure: TIFF support: yes
configure: gzip compressed raw support: yes
configure: bzip2 compressed raw support: yes
configure: Lens defects correction via lensfun: yes
[phi___@localhost ufraw-0.16]$
Toujours en tant qu’utilisateur, pour construire les binaires, nous exécuterons la commande suivante :
make
gimp-tool --install-bin ufraw-gimp
gimptool-2.0 --install-bin ufraw-gimp
make install
[root@localhost ufraw-0.16]# make install
Making install in po
make[1]: entrant dans le répertoire « /home/phi___/Images/ufraw-0.16/po »
if test -r ".././mkinstalldirs"; then \
.././mkinstalldirs /usr/share; \
else \
/bin/sh ../mkinstalldirs /usr/share; \
fi
installing ca.gmo as /usr/share/locale/ca/LC_MESSAGES/ufraw.mo
installing cs.gmo as /usr/share/locale/cs/LC_MESSAGES/ufraw.mo
installing da.gmo as /usr/share/locale/da/LC_MESSAGES/ufraw.mo
installing de.gmo as /usr/share/locale/de/LC_MESSAGES/ufraw.mo
installing es.gmo as /usr/share/locale/es/LC_MESSAGES/ufraw.mo
installing fr.gmo as /usr/share/locale/fr/LC_MESSAGES/ufraw.mo
installing it.gmo as /usr/share/locale/it/LC_MESSAGES/ufraw.mo
installing ja.gmo as /usr/share/locale/ja/LC_MESSAGES/ufraw.mo
installing ko.gmo as /usr/share/locale/ko/LC_MESSAGES/ufraw.mo
installing nb.gmo as /usr/share/locale/nb/LC_MESSAGES/ufraw.mo
installing nl.gmo as /usr/share/locale/nl/LC_MESSAGES/ufraw.mo
installing pl.gmo as /usr/share/locale/pl/LC_MESSAGES/ufraw.mo
installing pt.gmo as /usr/share/locale/pt/LC_MESSAGES/ufraw.mo
installing ru.gmo as /usr/share/locale/ru/LC_MESSAGES/ufraw.mo
installing sr.gmo as /usr/share/locale/sr/LC_MESSAGES/ufraw.mo
mkdir -p -- /usr/share/locale/sr@latin/LC_MESSAGES
installing sr@latin.gmo as /usr/share/locale/sr@latin/LC_MESSAGES/ufraw.mo
installing sv.gmo as /usr/share/locale/sv/LC_MESSAGES/ufraw.mo
installing zh_CN.gmo as /usr/share/locale/zh_CN/LC_MESSAGES/ufraw.mo
if test "ufraw" = "glib"; then \
if test -r ".././mkinstalldirs"; then \
.././mkinstalldirs /usr/share/glib-2.0/gettext/po; \
else \
/bin/sh ../mkinstalldirs /usr/share/glib-2.0/gettext/po; \
fi; \
/usr/bin/install -c -m 644 ./Makefile.in.in \
/usr/share/glib-2.0/gettext/po/Makefile.in.in; \
else \
: ; \
fi
make[1]: quittant le répertoire « /home/phi___/Images/ufraw-0.16/po »
Making install in icons
make[1]: entrant dans le répertoire « /home/phi___/Images/ufraw-0.16/icons »
make[2]: entrant dans le répertoire « /home/phi___/Images/ufraw-0.16/icons »
make[2]: Rien à faire pour « install-exec-am ».
test -z "/usr/share/pixmaps" || /bin/mkdir -p "/usr/share/pixmaps"
/usr/bin/install -c -m 644 'ufraw.png' '/usr/share/pixmaps/ufraw.png'
make[2]: quittant le répertoire « /home/phi___/Images/ufraw-0.16/icons »
make[1]: quittant le répertoire « /home/phi___/Images/ufraw-0.16/icons »
make[1]: entrant dans le répertoire « /home/phi___/Images/ufraw-0.16 »
make[2]: entrant dans le répertoire « /home/phi___/Images/ufraw-0.16 »
test -z "/usr/bin" || /bin/mkdir -p "/usr/bin"
/usr/bin/install -c 'ufraw-batch' '/usr/bin/ufraw-batch'
test -z "" || /bin/mkdir -p ""
test -z "/usr/lib64/cinepaint/0.22-1/plug-ins" || /bin/mkdir -p "/usr/lib64/cinepaint/0.22-1/plug-ins"
/usr/bin/install -c 'ufraw-cinepaint' '/usr/lib64/cinepaint/0.22-1/plug-ins/ufraw-cinepaint'
test -z "/usr/lib64/gimp/2.0/plug-ins" || /bin/mkdir -p "/usr/lib64/gimp/2.0/plug-ins"
/usr/bin/install -c 'ufraw-gimp' '/usr/lib64/gimp/2.0/plug-ins/ufraw-gimp'
test -z "/usr/bin" || /bin/mkdir -p "/usr/bin"
/usr/bin/install -c 'ufraw' '/usr/bin/ufraw'
test -z "/usr/share/man/man1" || /bin/mkdir -p "/usr/share/man/man1"
/usr/bin/install -c -m 644 'ufraw.1' '/usr/share/man/man1/ufraw.1'
test -z "" || /bin/mkdir -p ""
make[2]: quittant le répertoire « /home/phi___/Images/ufraw-0.16 »
make[1]: quittant le répertoire « /home/phi___/Images/ufraw-0.16 »
[root@localhost ufraw-0.16]#
Quelques copies d’écran :
Conclusion
Dans ce cas précis, Lensfun n’est applicable que sur des fichiers RAW en graphique grâce à UfRAW. Bien entendu, Lensfun peut toujours être utilisé en ligne de commande ou via un script Bash pour automatiser les traitements par lot par exemple.
Même si cette combinaison UfRAW/Lensfun est annoncée comme expérimentale sur le site d’UfRAW, je n’ai pas rencontré de problème particulier après quelques fichiers traités et pas mal de test/manipulation.
A noter que Lensfun permet également de traiter les aberrations chromatiques, le vignettage, les distorsions et les géométries des objectifs.
Les choses évoluent !! A l’annonce de la sortie d’UFRaw 0.17 et de l’intégration complète de Lensfun, j’avais noté cet article comme "obsolète". L’auteur d’UFRaw a indiqué, sur son site, que la correction géométrique des optiques via Lensfun était activée par défaut. J’avais d’abord compris que Lensfun était intégré dans UFRaw. En fait, ce n’est pas tout à fait le cas, la procédure ci-dessus reste d’actualité. Par "intégration complète", il faut comprendre que UFRaw est maintenant prévu pour fonctionner avec LensFun, la version précédente était estampillée "expérimentale".
Donc pas de grand changement dans la procédure ci-dessus, si ce l’est que l’on est plus obligé de mettre l’option "—with-lensfun" pour le script configure d’UFRaw. On aura donc :
[phi___@localhost ufraw-0.17]$ ./configure --enable-contrast --prefix=/usr
Pour information, la compilation s’est très bien passée :
D’autre part, Andrew Zabolotny (auteur de Lensfun), nous propose une procédure pour compléter la base de données de correction des optiques. Ainsi, si un objectif n’est pas dans la base de Lensfun, il est possible de la compléter : http://lensfun.berlios.de/lens-calibration/.