Note de ce sujet :
  • Moyenne : 4.5 (2 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Corrections de taches sur vieux négatifs avec dt et opencv
#1
Bonjour,
Pour ceux et celles qui aiment "bidouiller" un peu de code Wink 
inspiré de :
https://github.com/Tschucker/Python-Auto...ting.ipynb

photo originale traitée avec docteur néga  dt :

[Image: original.png]

création d'un masque avec dt  à base de masque paramétrique seuil des détails et coloriser en noir les zone blanches à ne pas corriger:

[Image: mask1.png]

Code Python  sur ces 2 images:
Code :
#!/usr/bin/env python3

'''
inspiré de
https://github.com/Tschucker/Python-Automatic-Sensor-Dust-Removal/blob/main/ocv_dust_inpainting_example/ocv_sensor_dust_inpainting.ipynb
@author: coelb
'''

import numpy as np
import cv2

sourcename="im.png"
maskname = "mask.png"

image = cv2.imread(sourcename, cv2.IMREAD_UNCHANGED)

# luminance
select = np.array([[0.114, 0.587, 0.299 ]])
image16gray = cv2.transform(image, select)
#-------------------------- traitement du masque 8 bits
mask8 = cv2.imread(maskname)
#cv2.imwrite('sourcegray.png', image16gray)
maskgray = cv2.transform(mask8, select)
#cv2.imwrite('maskgray.png', maskgray) 
#--------------------seuillage entre 2 valeurs 8 bits à ajuster
global_thresh = cv2.threshold(maskgray,185,240,cv2.THRESH_BINARY)[1]
cv2.imwrite('global_threshold.png', global_thresh)
#-----------Filter
# grossisement des zones de corrections à ajuster
KERNEL = np.ones((10,10), dtype=int)*10
mask_filt = cv2.filter2D(global_thresh,-1 ,KERNEL)
cv2.imwrite('filter.png', mask_filt) 

#-----------------------------corrections image
# rayon à ajuster
radius = 10
flags = cv2.INPAINT_NS # cv2.INPAINT_NS ou cv2.INPAINT_TELEA
cimg_inpaint = cv2.inpaint(image16gray, mask_filt, radius, flags=flags)
cv2.imwrite('auto_dust_inpainting.png', cimg_inpaint)

Photo dépoussiérée :



[Image: auto-dust-inpainting-02.png]



Avec quelques  10 retouches supplémentaires dans dt pour peaufiner. (peux mieux faire)

Cordialement

PS: je n'arrive pas à faire marcher Gimp resynthetizer sur ma machine alors...
Mes photos
dt compilé en local, dernière version officielle et master
Répondre
#2
Je trouve ça très intéressant, merci Corbert.
Pour les capteurs bien tachés ça peut vraiment aider à gagner du temps.

J'ai aussi déniché de vieilles plaques et des négatifs chez mes parents et, quand j'en aurai le temps je chercherai à les scanner et les "restaurer" numériquement car malheureusement elles sont globalement pas très en forme...
Je ne manquerai pas de tester cette solution !
dt stable / Ubuntu 22.04
Répondre
#3
(23-08-23, 13:17)Cobert a écrit : création d'un masque avec dt  à base de masque paramétrique seuil des détails et coloriser en noir les zone blanches à ne pas corriger:

Je serais preneur de détails sur cette manip... Shy
dt stable / Ubuntu 22.04
Répondre
#4
Hello,
Le but du masque est de faire apparaître les défauts (poussières, points blancs) avec une luminance supérieures au contenu utile de l'image, j'ai utilisé un clone de l'image à corriger en essayant de faire apparaître en blanc les défauts. Comme je suis bordélique et que je compresse l'historique je ne peux envoyer les xmp sur cet exemple, j'ai fais plusieurs modifs après le post. La clé est un masque paramétrique en n'utilisant que le réglage "seuil des détails" sur coloriser par exemple avec du blanc (sat = o, clarté max). Sur un négatifs les fréquences hautes sont souvent réduites. 

[Image: mask.png]

Après une autre instance de coloriser( en noir) peut permettre de "descendre" les zones blanches non voulue qui pourrait être prise en compte pour la corrections.

Opencv travaille par défaut sur 8 bits, la corrections peut s'effectuer en couleurs sur 8 bits ou sur monocanal sur 16 bits, le bout de code donné marche sur 16 bits (negatif NB),
Les images sont exporter en png dans dt.

Bon, c'est un peu bidouille expérimentale, si tu as une photo qui t'interesse, je suis partant pour essayer Wink 

Cordialement
Mes photos
dt compilé en local, dernière version officielle et master
Répondre
#5
Hello,
Pour compléter un lien vers un traitement dt d'un négatif année 1950 : standardistes des P&T avant "l'automatique" ( automatique qu'on espère pour les taches dans dt Tongue   )
https://drive.google.com/drive/folders/1...sp=sharing
fichier raw (arw) avec les xmp de l'image à corriger et du masque,
Les .png exportés par dt renommés en image et mask   : l'image en rec2020 linéaire 16 bits pour tester, le mask en srvb)
Le tiff généré par le code dust.py avec son traitement sur dt et son export en jpeg.
Le petit code dust.py a été adapté pour gérer la couleur et le NB en 16 bits. Il fonctionne dans le même répertoire que les png (à améliorer)


[Image: output.jpg]

Pour le fun,
Cordialement
Mes photos
dt compilé en local, dernière version officielle et master
Répondre
#6
Merci pour le lien. Je vais regarder et voir avec quelques-uns de mes scans de négatifs.
Répondre
#7
Bonsoir,

@JPG54 Si tu peux me faire un retour quand tu pourras.

Je viens d'essayer sur la photo sous marine du post https://forums.darktable.fr/showthread.php?tid=6553

C'est la constellation de taches mais on arrive à en éliminer quand même pas mal. il faut de toutes façon compléter manuellement.





[Image: output.jpg]
Cordialement.
Mes photos
dt compilé en local, dernière version officielle et master
Répondre
#8
Bien sûr, je reviendrai quand j'aurais pris en main et fait quelques tests sur mes négatifs.
Répondre
#9
Ca tombe bien ta méthode de correction des taches, je viens de recevoir le duplicateur de films argentiques JJC :
https://fr.aliexpress.com/item/100500378...pt=glo2fra
l'éclairage n'est pas compris et je l'attends, il est coincé en douanes. Je te ferai un retour.
Répondre
#10
hello,
tu n'as pas déjà plein de trucs pour les negatifs? Cool
https://forums.darktable.fr/showthread.php?tid=4539
cdlt
Mes photos
dt compilé en local, dernière version officielle et master
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 3 visiteur(s)