OVH Cloud OVH Cloud

Comparaison d'images

18 réponses
Avatar
Geo Cherchetout
Bonjour,

J'avais quelques centaines de photos de famille en vrac dans une boîte, dont
certaines en plusieurs exemplaires. Je les ai toutes numérisées sans me
soucier de ces multiplicités et les fichiers jpeg résultants sont dans un
répertoire "album". Existe-t-il, sous Linux, un programme capable de dresser
automatiquement une liste des images de ce répertoire qui se ressemblent ?
(Comparer visuellement chacune à toutes les autres me prendrait des heures.)
Merci d'avance pour vos suggestions.

8 réponses

1 2
Avatar
denis.paris
Le 17/04/2020 à 14:57, Geo Cherchetout a écrit :
Le 15/04/2020 21:15, *Nicolas George* a écrit :
ffmpeg -i photo0002.jpg -i photo0003.jpg -lavfi ssim -f null -

J'ai repéré deux images manifestement issues de tirages d'un même
négatif et j'en ai "resizé" une avec la géométrie de l'autre. Voici ce
que dit ffmpeg :
$ ffmpeg -i 0298.jpg -i 0043.jpg -lavfi ssim -f null -
ffmpeg version 4.1.5 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 8.3.1 (Mageia 8.3.1-0.20190524.1.mga7) 20190524
  configuration: --prefix=/usr --enable-shared --enable-pic
--libdir=/usr/lib64 --shlibdir=/usr/lib64 --incdir=/usr/include
--disable-stripping --enable-postproc --enable-gpl --enable-pthreads
--enable-libtheora --enable-libvorbis --disable-encoder=vorbis
--enable-libvpx --enable-runtime-cpudetect --enable-libaom
--enable-libdc1394 --enable-librtmp --enable-libspeex
--enable-libfreetype --enable-libgsm --enable-libcelt --enable-libopus
--enable-libopencv --enable-libopenjpeg --enable-libtwolame
--enable-libxavs --enable-frei0r --enable-libmodplug --enable-libass
--enable-gnutls --enable-libcdio --enable-libpulse --enable-libv4l2
--enable-avresample --enable-opencl --enable-libmp3lame --enable-sndio
--enable-libdav1d --enable-libopencore-amrnb --enable-libopencore-amrwb
--enable-version3 --enable-libx264 --enable-libx265
--enable-libvo-amrwbenc --enable-libxvid
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
Input #0, image2, from '0298.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 29121 kb/s
    Stream #0:0: Video: mjpeg, gray(bt470bg/unknown/unknown), 1366x1974
[SAR 600:600 DAR 683:987], 25 tbr, 25 tbn, 25 tbc
Input #1, image2, from '0043.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 38144 kb/s
    Stream #1:0: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown),
1366x1974 [SAR 300:300 DAR 683:987], 25 tbr, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 (mjpeg) -> ssim:main
  Stream #1:0 (mjpeg) -> ssim:reference
  ssim -> Stream #0:0 (wrapped_avframe)
Press [q] to stop, [?] for help
[swscaler @ 0x1590440] deprecated pixel format used, make sure you did
set range correctly
Output #0, null, to 'pipe:':
  Metadata:
    encoder         : Lavf58.20.100
    Stream #0:0: Video: wrapped_avframe, gray, 1366x1974 [SAR 600:600
DAR 683:987], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc (default)
    Metadata:
      encoder         : Lavc58.35.100 wrapped_avframe
frame=    1 fps=0.0 q=-0.0 Lsize=N/A time:00:00.04 bitrate=N/A
speed=0.731x
video:1kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: unknown
[Parsed_ssim_0 @ 0x1501d80] SSIM Y:0.626271 (4.274437) All:0.626271
(4.274437)
Comment interpréter ce résultat ? Pure curiosité parce que, de toute
façon, je ne saurai jamais écrire un script capable d'automatiser les
comparaisons.
Qu'est-ce que c'est que cette histoire de "deprecated pixel format" ?

Il reste à faire la même chose avec des images manifestement différentes
et à repérer ce qui change le plus parmi les caractéristiques des deux
images.
Avatar
Nicolas George
Le 17/04/2020 à 14:57, Geo Cherchetout a écrit :
[Parsed_ssim_0 @ 0x1501d80] SSIM Y:0.626271 (4.274437) All:0.626271
(4.274437)


C'est cette ligne-là qui contient le résultat.
Qu'est-ce que c'est que cette histoire de "deprecated pixel format" ?


Un truc qui aurait dû être mis à jour il y a des lustres, mais sans
importance.
"denis.paris" , dans le message
<5e99ac81$0$20343$, a écrit :
Il reste à faire la même chose avec des images manifestement différentes
et à repérer ce qui change le plus parmi les caractéristiques des deux
images.

Exactement.
Avatar
Geo Cherchetout
Le 17/04/2020 15:17, *denis.paris* a écrit :
Il reste à faire la même chose avec des images manifestement différentes
et à repérer ce qui change le plus parmi les caractéristiques des deux
images.

Par esprit de contradiction je lance la commande sur deux fois la même image :
$ ffmpeg -i 0043.jpg -i 0043.jpg -lavfi ssim -f null -...
[Parsed_ssim_0 @ 0x201ac00] SSIM Y:1.000000 (inf) U:1.000000 (inf)
V:1.000000 (inf) All:1.000000 (inf)
Ensuite sur deux images presque identiques, l'une résultant de l'autre par
sa transformation en niveaux de gris (et recompression) par Gimp :
$ ffmpeg -i 0043.jpg -i 0043g.jpg -lavfi ssim -f null -
...
[Parsed_ssim_0 @ 0x1a33780] SSIM Y:0.999960 (44.032064) U:0.996936
(25.136807) V:0.997599 (26.196736) All:0.998165 (27.364231)
Il semble donc que les valeurs Y et All plafonnent à 1.000000 pour des
images identiques. Je suppose que All est une synthèse des autres chiffres ?
Merci à tous pour vos contributions, je laisse tomber à cause de mon
incapacité à écrire un script utilisant cette nouvelle connaissance. Mon
album numérique comportera sûrement quelques doublons mais ce n'est pas bien
grave.
Avatar
Nicolas George
Geo Cherchetout , dans le message <r7eshu$28fc$, a
écrit :
Il semble donc que les valeurs Y et All plafonnent à 1.000000 pour des
images identiques. Je suppose que All est une synthèse des autres chiffres ?

https://fr.wikipedia.org/wiki/YUV
Avatar
Geo Cherchetout
Le 18/04/2020 15:30, *Nicolas George* a écrit :
https://fr.wikipedia.org/wiki/YUV

Merci pour le rappel pas complètement inutile mais ça ne m'éclaire pas du
tout sur ce que représente "All" : (SSIM of the compared frames for the
whole frame). Je pourrais peut-être m'en faire une idée en multipliant les
comparaisons mais c'est plus facile, plus rapide et plus sûr de demander à
ceux qui savent...
Avatar
Nicolas George
Geo Cherchetout , dans le message <r7f4k6$2cfa$, a
écrit :
Merci pour le rappel pas complètement inutile mais ça ne m'éclaire pas du
tout sur ce que représente "All"

Ben « tout » : le SSIM des trois plans ensemble plutôt que séparément,
donc une sorte de moyenne des SSIM individuels.
Avatar
Geo Cherchetout
Le 18/04/2020 18:54, *Nicolas George* a écrit :
Ben « tout » : le SSIM des trois plans ensemble plutôt que séparément,
donc une sorte de moyenne des SSIM individuels.

Parfait, ça correspond à ce que je pressentais confusément. Cette fois je ne
t'embête plus, c'est promis. :-)
Avatar
Nicolas George
Geo Cherchetout , dans le message <r7ff0g$2hmh$, a
écrit :
Cette fois je ne
t'embête plus, c'est promis. :-)

Tu ne m'as pas embêté, ne t'inquiète pas.
1 2