titre

Photographie argentique et numérique sous Linux...
image fond entete
 
  Correction géométrique des optiques avec Lensfun via UFRAW  du samedi 23 janvier 2010.

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


Et voici ma sortie écran de la commande :

[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


Et voici ma sortie écran de la commande :

[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


Et voici ma sortie écran de la commande (Remarquer la dernière ligne relative à Lensfun) :

[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


Si tout se passe bien, les binaires sont disponibles et installables. Et tout d’abord, on va installer le plug-in pour GIMP :

gimp-tool --install-bin ufraw-gimp


Sous la distribution Mandriva, on aura :

gimptool-2.0 --install-bin ufraw-gimp


ce qui va copier le plug-in ufraw-gimp dans /home/user/.gimp-2.6/plug-ins.
Et maintenant, installons UfRAW mais cette fois avec les privilèges root :

make install


Et voici ma sortie écran de la commande :

[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 :

PNG - 344.5 ko
Liste des optiques...

PNG - 345.3 ko
Avant correction Lensfun

PNG - 335.3 ko
Après correction Lensfun


Survoler l’image pour visualiser la correction géométrique.

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.




UFRaw 0.17 & Lensfun 0.25

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 :

  • sur une Mandriva Linux 2010.0 / Noyau : 2.6.31.13 / KDE 4.4.2 / Qt 4.6.1
  • et la Mandriva Spring Linux 2010.1 / Noyau : 2.6.33.5 / KDE 4.4.3 / Qt 4.6.2 .

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




Date de mise à jour : dimanche 18 juillet 2010.
 
 
© 2003/17 - Philippe Jimenez - v2