romigrou / ssim

Fast and portable SSIM implementation
zlib License
40 stars 12 forks source link

Support pour newbies #4

Closed tados000 closed 1 year ago

tados000 commented 2 years ago

Bonjour, Je débute en linux et j'ai du mal à utiliser le programme.

Pas à pas, voici mes démarches: 1) git clone https://github.com/romigrou/ssim.git 2) cd ssim 3) vim CMakeLists.txt pour mettre sur RMGR_SSIM_NO_OPENMP sur ON, RMGR_SSIM_BUILD_CLI sur ON, RMGR_SSIM_BUILD_SAMPLE sur ON et RMGR_SSIM_BUILD_TESTS sur on 4) cmake CMakeLists.txt 5) make Makefile

A partir de là, je suis bloqué.

Je ne sais pas, en ligne de commande, comment utiliser le programme afin d'obtenir le SSIM entre 2 images.

Merci pour l'aide

tados000 commented 1 year ago

Bonjour,

J'essaie désespérément d'installer le programme

git clone https://github.com/romigrou/ssim.git cd ssim sudo cmake -D RMGR_SSIM_BUILD_CLI=ON -D RMGR_SSIM_NO_OPENMP=ON -D RMGR_SSIM_BUILD_SAMPLE=ON -D RMGR_SSIM_BUILD_TESTS=ON CMakeLists.txt sudo make Makefile

Après je ne vois pas comment lancer le programme en ligne de commande.

Merci pour votre aide

romigrou commented 1 year ago

J'ai corrigé quelques problèmes, mais sinon ça devrait être aussi simple que :

git clone https://github.com/romigrou/ssim.git cd ssim make rmgr-ssim-cli bin/linux-*/release/rmgr-ssim

Sans faire de cours, voici quelques infos : pas besoin de sudo pour tout ça et ce n'est pas comme ça qu'on appelle ni cmake ni make, aucun d'eux ne prend en paramètre un fichier.

cmake attend un chemin de répertoire (celui contenant le CMakeLists.txt racine). On peut appeler cmake depuis le répertoire contenant le CMakelists.txt (auquel cas on appelle "cmake .") mais c'est plutôt déconseillé. En général, on crée un répertoire dans lequel cmake va créer tous ses fichiers temporaires, on se met dans ce répertoire et on appelle ensuite cmake. Typiquement : mkdir build cd build cmake ..

En ce qui concerne make, il prend en paramètre le(s) nom(s) d'une ou plusieurs cibles (càd des choses à construire) et utilise le fichier Makefile (dans le cas présent le fichier utilisé est GNUmakefile) se trouvant dans le répertoire courant. Pour changer le répertoire dans lequel make va s'exécuter il faut appeler "make -c repertoire", pour lui spécifier le fichier makefile à utiliser on peut faire "make -f fichier.mk" mais c'est très rare d'en avoir besoin.

tados000 commented 1 year ago

Bonjour, Cela fonctionne :-)

Je viens de comparer avec la SSIM de FFMPEG (https://github.com/FFmpeg/FFmpeg/blob/73fada029c527fda6c248785a948c61249fd4b2d/libavfilter/vf_ssim.c).

Les valeurs ne sont assez éloignées : FFMPEG : 0.819918 rmgr-ssim : 0.6313 image

Qu'en pensez vous?

Bonne année

romigrou commented 1 year ago

Bonjour,

En fait, vous comparez des choux et des carottes. Mon programme calcule le SSIM sur chacune des composantes RGB ainsi que la moyenne des trois, tandis que FFMPEG le calcule dans l'espace YUV (qui est celui dans lequel les images JPEG sont encodées) et en dérive une valeur globale qui semble être là aussi une simple moyenne.

Si on regarde la valeur de la composante Y pour FFMPEG on trouve 0.666743 et si on demande à rmgr-ssim de calculer le SSIM sur Y (en utilisant l'option -y) on obtient 0.6859. Ceci me semble plutôt proche, d'autant plus sachant que les formules pour calculer Y sont légèrement différentes (j'utilise celle de BT.709 alors que JPEG utilise celle de BT.601). Si on ajoute à cela que FFMPEG travaille probablement directement dans l'espace YUV tandis dans mon cas l'image JPEG est convertie de YUV vers RGB lors du chargement puis à nouveau vers YUV par mes soins, je pense que la différence de 0.02 devient explicable.

Bonnes fêtes également.