Forum darktable FR
Corrections de taches sur vieux négatifs avec dt et opencv - Version imprimable

+- Forum darktable FR (https://forums.darktable.fr)
+-- Forum : Utilisation de darktable (https://forums.darktable.fr/forumdisplay.php?fid=97)
+--- Forum : Trucs et Astuces (https://forums.darktable.fr/forumdisplay.php?fid=87)
+--- Sujet : Corrections de taches sur vieux négatifs avec dt et opencv (/showthread.php?tid=6563)

Pages : 1 2 3 4


Corrections de taches sur vieux négatifs avec dt et opencv - Cobert - 23-08-23

Bonjour,
Pour ceux et celles qui aiment "bidouiller" un peu de code Wink 
inspiré de :
https://github.com/Tschucker/Python-Automatic-Sensor-Dust-Removal/blob/main/ocv_dust_inpainting_example/ocv_sensor_dust_inpainting.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...


RE: Corrections de taches sur vieux négatifs avec dt et opencv - manu - 24-08-23

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 !


RE: Corrections de taches sur vieux négatifs avec dt et opencv - manu - 10-09-23

(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


RE: Corrections de taches sur vieux négatifs avec dt et opencv - Cobert - 10-09-23

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


RE: Corrections de taches sur vieux négatifs avec dt et opencv - Cobert - 12-09-23

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/1V909NR_QvLJc8-Zxu2rQR8bANQ2bMR65?usp=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


RE: Corrections de taches sur vieux négatifs avec dt et opencv - jpg54 - 13-09-23

Merci pour le lien. Je vais regarder et voir avec quelques-uns de mes scans de négatifs.


RE: Corrections de taches sur vieux négatifs avec dt et opencv - Cobert - 13-09-23

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.


RE: Corrections de taches sur vieux négatifs avec dt et opencv - jpg54 - 13-09-23

Bien sûr, je reviendrai quand j'aurais pris en main et fait quelques tests sur mes négatifs.


RE: Corrections de taches sur vieux négatifs avec dt et opencv - jpg54 - 15-09-23

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/1005003788099019.html?spm=a2g0o.order_list.order_list_main.17.21ef5e5bwJc10E&gatewayAdapt=glo2fra
l'éclairage n'est pas compris et je l'attends, il est coincé en douanes. Je te ferai un retour.


RE: Corrections de taches sur vieux négatifs avec dt et opencv - Cobert - 18-09-23

hello,
tu n'as pas déjà plein de trucs pour les negatifs? Cool
https://forums.darktable.fr/showthread.php?tid=4539
cdlt