Wie kann ich Staubsprenkel des Wandersensors automatisch digital aus einer großen Fotoserie entfernen?

In der Wüste wurde mein Sensor staubig. Ich war wochenlang unterwegs und habe dies bis zum Ende meiner Reise nicht bemerkt, daher habe ich Hunderte von Fotos mit Sensorschmutz. Während des Urlaubs wurde der Staub allmählich schlimmer, da ich häufig die Objektive wechselte. Nach meinem Urlaub habe ich den Sensor professionell reinigen lassen und neue Fotos haben keine Flecken, aber ich suche nach einer Lösung für die Urlaubsfotos.

Um meine Fotos zu bereinigen, habe ich The Gimp verwendet, um eine Maske der Orte der schlimmsten Staubpartikel zu erstellen:

schlimmsten Staub Standorte

benutzte dann gmic, um sie von der Kommandozeile zu entfernen:

gmic 08-34-51.jpg ../../../dustmask_20180606_sky_flat_neg.png +inpaint_patchmatch[0] [1],10,7,4,2,1,0 -o[2] 08-34-51-clean.jpg

Obwohl dies keine optimale Lösung ist, da diese Bereiche im Wesentlichen von Grund auf neu gezeichnet werden (ohne die Hintergrundinformationen zu verwenden), liefert es bei blauem Himmel zufriedenstellende Ergebnisse. Ich dachte, dass ich auf diese Weise den Prozess für die Hunderte von betroffenen Bildern automatisieren könnte. Leider ist der Staub nicht stationär , also funktioniert das nicht. Es verschiebt sich in der Größenordnung von 20 Pixeln, was etwa 80 µm entspricht. Ich weiß nicht, ob dies daran liegt, dass sich der Staub physisch bewegt, oder ob es an der Bildverarbeitung in der Kamera wie Bildstabilisierung oder Objektivkorrektur liegt. Ich habe einige Bilder sowohl im RAW- als auch im JPEG-Format aufgenommen, und bei diesen Bildern kann ich visuell eine leichte Verschiebung in der Form des Bildes erkennen.

Es ist sehr subtil, aber wenn Sie die folgenden beiden Bilder vergleichen, hat sich das größte und auffälligste Staubstück von einer Pixelzentrierung (1677, 619)zu einer Pixelzentrierung bewegt (1655, 603). Am anderen Ende hat sich ein weniger auffälliges Pixel auf der rechten Seite von (4919, 1485)zu verschoben (4940, 1483). Vielleicht sollte es nicht allzu überraschend sein, dass sich Staubpartikel relativ zum Sensor bewegen können und dies auch tun?

Bild 1 mit Staub am Himmel

Bild 2 mit Staub am Himmel

Die Fotos werden im Abstand von etwa 90 Minuten aufgenommen. Die Bilder, die ich gepostet habe, sind um den Faktor 2 heruntergerechnet.

Die EXIF-Daten enthalten Sony Makernote-Daten, die Informationen zur Bildstabilisierung enthalten können, wie z ImageStabilization = 1. Ich weiß nicht, ob es weitere Details zur Bildstabilisierung enthält. Es enthält ein Feld Sony_0x201f = 128 17 2 0, das zwischen den Bildern zu variieren scheint, aber zwischen den beiden oben gezeigten Bildern identisch ist, sodass es keine (eindeutigen) Informationen zur Korrektur der Bildstabilisierung identifiziert. Ich weiß nicht, ob es andere Bereiche gibt. Die vollständigen Exif-Daten (wie von gemeldet exiftool -v) für ein Bild zeigen:

  ExifToolVersion = 10.10
  Dateiname = 08-35-11.jpg
  Verzeichnis = .
  Dateigröße = 9440161
  FileModifyDate = 1528067625
  FileAccessDate = 1529519016
  FileInodeChangeDate = 1528150970
  Dateiberechtigungen = 33204
  Dateityp = JPEG
  FileTypeExtension = JPG
  MIMEType = image/jpeg
JPEG APP1 (44908 Bytes):
  ExifByteOrder = II
  + [IFD0 Verzeichnis mit 13 Einträgen]
  | 0) ProcessingSoftware = digiKam-5.6.0
  | 1) Bildbeschreibung =                                
  | 2) Fabrikat = SONY
  | 3) Modell = ILCE-6000
  | 4) Orientierung = 1
  | 5) XResolution = 350 (350/1)
  | 6) YAuflösung = 350 (350/1)
  | 7) Auflösungseinheit = 2
  | 8) Software = ILCE-6000 v3.20
  | 9) Änderungsdatum = 2018:05:11 08:35:11
  | 10) YCbCrPositionierung = 2
  | 11) ExifOffset (Unterverzeichnis) -->
  | + [ExifIFD-Verzeichnis mit 38 Einträgen]
  | | 0) Belichtungszeit = 0,003125 (1/320)
  | | 1) FZahl = 11 (110/10)
  | | 2) Belichtungsprogramm = 3
  | | 3) ISO = 100
  | | 4) Empfindlichkeitstyp = 2
  | | 5) Empfohlener Belichtungsindex = 100
  | | 6) ExifVersion = 0230
  | | 7) DateTimeOriginal = 2018:05:11 08:35:11
  | | 8) Erstellungsdatum = 2018:05:11 08:35:11
  | | 9) Komponentenkonfiguration = 1 2 3 0
  | | 10) KomprimierteBitsproPixel = 3 (3/1)
  | | 11) Helligkeitswert = 10,76328125 (27554/2560)
  | | 12) Belichtungskompensation = 0 (0/10)
  | | 13) MaxApertureValue = 3,6171875 (926/256)
  | | 14) Messmodus = 5
  | | 15) Lichtquelle = 0
  | | 16) Blitz = 16
  | | 17) Brennweite = 18 (180/10)
  | | 18) MakerNoteSony (Unterverzeichnis) -->
  | | + [MakerNotes-Verzeichnis mit 94 Einträgen]
  | | | 0) Sony_0x1003 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  | | | 1) Sony_0x2000 = 0
  | | | 2) Vorschaubild =
  | | | 3) Bewertung = 0
  | | | 4) Sony_0x2003 =
  | | | 5) Kontrast = 0
  | | | 6) Sättigung = 0
  | | | 7) Schärfe = 0
  | | | 8) Helligkeit = 0
  | | | 9) LongExposureNoiseReduction = 1
  | | | 10) HighISONoiseReduction = 2
  | | | 11) HDR = 0 0
  | | | 12) Sony_0x200c = 0 0 0
  | | | 13) Sony_0x200d = 1 (10/10)
  | | | 14) WBShiftAB_GM = 0 0
  | | | 15) ShotInfo (Unterverzeichnis) -->
  | | | + [BinaryData-Verzeichnis, 390 Bytes]
  | | | | FaceInfoOffset = 94
  | | | | SonyDateTime = 2018:05:11 08:35:11
  | | | | SonyImageHeight = 4000
  | | | | SonyImageWidth = 6000
  | | | | Gesichter erkannt = 0
  | | | | FaceInfoLength = 37
  | | | | MetaVersion = DC7303320222000
  | | | 16) CreativeStyle = Standard
  | | | 17) Farbtemperatur = 0
  | | | 18) Farbkompensationsfilter = 0
  | | | 19) Szenenmodus = 0
  | | | 20) Zonenanpassung = 0
  | | | 21) DynamicRangeOptimizer = 3
  | | | 22) Bildstabilisierung = 1
  | | | 23) Farbmodus = 0
  | | | 24) FullImageSize = 4000 6000
  | | | 25) PreviewImageSize = 1080 1616
  | | | 26) Dateiformat = 3 3 1 0
  | | | 27) Qualität = 2
  | | | 28) FlashExposureComp = 0 (0/10)
  | | | 29) WeißabgleichFineTune = 0
  | | | 30) Weißabgleich = 0
  | | | 31) Sony-Modell-ID = 312
  | | | 32) Telekonverter = 0
  | | | 33) MultiFrameNoiseReduction = 0
  | | | 34) PictureEffect = 0
  | | | 35) SoftSkinEffect = 0
  | | | 36) Vignettierungskorrektur = 2
  | | | 37) Laterale Chromatische Aberration = 2
  | | | 38) Verzerrungskorrektureinstellung = 0
  | | | 39) Sony_0x2015 = 65535
  | | | 40) Linsentyp = 65535
  | | | 41) LensSpec = ...5c
  | | | 42) AutoPortraitFramed = 0
  | | | 43) FlashAction = 0
  | | | 44) Sony_0x2018 = 0
  | | | 45) Sony_0x2019 = 0
  | | | 46) Sony_0x201a = 1
  | | | 47) Fokusmodus = 2
  | | | 48) AFAreaModeSetting = 1
  | | | 49) FlexibleSpotPosition = 0 0
  | | | 50) AFZoneSelected = 0
  | | | 51) Sony_0x201f = 128 17 2 0
  | | | 52) AFPointsUsed = 0 0 0 0 0 0 0 0 0 0
  | | | 53) Sony_0x2021 = 0
  | | | 54) FocalPlaneAFPointsUsed = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  | | | 55) Sony_0x2023 = 0
  | | | 56) Sony_0x5001 = 0 (0/1000)
  | | | 57) Sony_0x5002 = 128
  | | | 58) Belichtungsmodus = 7
  | | | 59) Sony_0xb045 = 0
  | | | 60) Sony_0xb046 = 0
  | | | 61) JPEG-Qualität = 65535
  | | | 62) FlashLevel = 0
  | | | 63) Freigabemodus = 0
  | | | 64) Sequenznummer = 0
  | | | 65) Anti-Unschärfe = 2
  | | | 66) Sony_0xb04c = 1 (10/10)
  | | | 67) Sony_0xb04d = 0
  | | | 68) DynamicRangeOptimizer = 1
  | | | 69) Sony_0xb050 = 65535
  | | | 70) Sony_0xb051 = 0
  | | | 71) IntelligentAuto = 0
  | | | 72) Sony_0xb053 = 0
  | | | 73) Weißabgleich = 0
  | | | 74) Tag9400c (Unterverzeichnis) -->
  | | | + [BinaryData-Verzeichnis, 556 Bytes]
  | | | | Freigabemodus2 = 0
  | | | | ShotNumberSincePowerUp = 2
  | | | | SequenceImageNumber = 0
  | | | | Sequenzlänge = 1
  | | | | Sequenzdateinummer = 0
  | | | | Sequenzlänge = 1
  | | | | KameraOrientation = 1
  | | | | Qualität2 = 0
  | | | | SonyImageHeight = 500
  | | | | ModelReleaseYear = 14
  | | | 75) Sony_0x9401 = ..f....pW..).6Q.\.(.GG..6\6.GG..6\6..$.........^. ..3..s.[Ausschnitt]
  | | | 76) Tag9402 (Unterverzeichnis) -->
  | | | + [BinaryData-Verzeichnis, 400 Bytes]
  | | | | Umgebungstemperatur = 21
  | | | | Fokusmodus = 2
  | | | | AFAreaMode = 1
  | | | | FokusPosition2 = 202
  | | | 77) Tag9403 (Unterverzeichnis) -->
  | | | + [BinaryData-Verzeichnis, 1000 Bytes]
  | | | 78) Tag9404b (Unterverzeichnis) -->
  | | | + [BinaryData-Verzeichnis, 556 Bytes]
  | | | | LensZoomPosition = 27
  | | | 79) Tag9405b (Unterverzeichnis) -->
  | | | + [BinaryData-Verzeichnis, 1992 Bytes]
  | | | | Sony-ISO = 4096
  | | | | BasisISO = 4096
  | | | | StopsAboveBaseISO = 4096
  | | | | SonyExposureTime2 = 6208
  | | | | Belichtungszeit = 0,003125
  | | | | SonyFNummer = 5888
  | | | | SonyMaxApertureValue = 5054
  | | | | SequenceImageNumber = 0
  | | | | Freigabemodus2 = 0
  | | | | HighISONoiseReduction = 2
  | | | | LongExposureNoiseReduction = 1
  | | | | PictureEffect2 = 0
  | | | | Belichtungsprogramm = 1
  | | | | CreativeStyle = 0
  | | | | Schärfe = 0
  | | | | Verzerrungskorrektur = 0
  | | | | Linsenformat = 1
  | | | | LensMount = 2
  | | | | LensType2 = 32787
  | | | | LensZoomPosition = 27
  | | | 80) Tag9406 (Unterverzeichnis) -->
  | | | + [BinaryData-Verzeichnis, 64 Bytes]
  | | | | Batterietemperatur = 87
  | | | | Batteriestand = 55
  | | | 81) Sony_0x9407 = .2WW.^....AT..W..>.WSi...lw...W.............T..i.... ...T....Wl
  | | | 82) Sony_0x9408 = i....*......\...*..}......u}..C.=..@.[.8k.&...| ......C^..pp..[Ausschnitt]
  | | | 83) Sony_0x9409 = . ...l.(....I.........`...s..........i7.@.Sp......>... .....@..........z...%...>.[Ausschnitt]
  | | | 86) Tag940c (Unterverzeichnis) -->
  | | | + [BinaryData-Verzeichnis, 64 Bytes]
  | | | | LensMount2 = 4
  | | | | LensType3 = 32787
  | | | | CameraE-mountVersion = 336
  | | | | LensE-mountVersion = 263
  | | | | LensFirmwareVersion = 1
  | | | 87) Sony_0x940d = ......g......z...?..u.............GO.D.....qUx... ?....el....8[Schnipsel]
  | | | 88) Tag940e (Unterverzeichnis) -->
  | | | + [BinaryData-Verzeichnis, 12288 Bytes]
  | | | 89) Sony_0xa100 =
  | | | 90) Tag2010g (Unterverzeichnis) -->
  | | | + [BinaryData-Verzeichnis, 6556 Bytes]
  | | | | Freigabemodus2 = 0
  | | | | DynamicRangeOptimizer = 1
  | | | | Freigabemodus3 = 0
  | | | | Freigabemodus2 = 0
  | | | | Blitzmodus = 1
  | | | | StopsAboveBaseISO = 4096
  | | | | Helligkeitswert = 17245
  | | | | DynamicRangeOptimizer = 1
  | | | | HDREinstellung = 0
  | | | | Belichtungskompensation = 0
  | | | | Bildprofil = 0
  | | | | Bildprofil = 0
  | | | | PictureEffect2 = 0
  | | | | Qualität2 = 0
  | | | | Messmodus = 0
  | | | | Belichtungsprogramm = 1
  | | | | WB_RGBLevels = 690 256 427
  | | | | Brennweite = 180
  | | | | MinBrennweite = 180
  | | | | MaxFocalLength = 2000
  | | | | Sony-ISO = 4096
  | | | | Linsenformat = 1
  | | | | LensMount = 2
  | | | | LensType2 = 32787
  | | | 91) Sony_0x940f = liVi.$........)....@..f.........&....@...Y@)..Y@. @........[Schnipsel]
  | | | 92) Tag9050 (Unterverzeichnis) -->
  | | | + [BinaryData-Verzeichnis, 944 Bytes]
  | | | | FlashStatus = 64
  | | | | ImageCount = 3836
  | | | | SonyFNummer = 5888
  | | | | Freigabemodus2 = 0
  | | | | ImageCount2 = 3836
  | | | | SonyDateTime2 = ....#.
  | | | | Freigabemodus2 = 0
  | | | | InterneSeriennummer = 162 254 226 13
  | | | | LensMount = 2
  | | | | Linsenformat = 1
  | | | | LensType2 = 32787
  | | | | LensSpecFeatures = .
  | | | | ImageCount3 = 44765
  | | | 93) Sony_0x9412 = ...@.V...................................... ...............[Schnipsel]
  | | 19) Benutzerkommentar =
  | | 20) FlashpixVersion = 0100
  | | 21) Farbraum = 1
  | | 22) ExifImageWidth = 6000
  | | 23) ExifImageHeight = 4000
  | | 24) InteropOffset (Unterverzeichnis) -->
  | | + [InteropIFD-Verzeichnis mit 2 Einträgen]
  | | | 0) InteropIndex = R98
  | | | 1) InteropVersion = 0100
  | | 25) Dateiquelle = 3
  | | 26) Szenentyp = 1
  | | 27) CustomRendered = 0
  | | 28) Belichtungsmodus = 0
  | | 29) Weißabgleich = 0
  | | 30) Digitales Zoomverhältnis = 1 (16/16)
  | | 31) Brennweite im 35-mm-Format = 27
  | | 32) SceneCaptureType = 0
  | | 33) Kontrast = 0
  | | 34) Sättigung = 0
  | | 35) Schärfe = 0
  | | 36) LensInfo = 18 200 3,5 6,3 (180/10 2000/10 35/10 63/10)
  | | 37) Objektivmodell = E 18–200 mm F3,5–6,3 OSS
  | 12) PrintIM (Unterverzeichnis) -->
  | + [PrintIM-Verzeichnis mit 3 Einträgen]
  | | DruckIMVersion = 0300
  | | 0) PrintIM_0x0002 = 1
  | | 1) PrintIM_0x0003 = 34
  | | 2) PrintIM_0x0101 = 0
  + [IFD1 Verzeichnis mit 13 Einträgen]
  | 0) Komprimierung = 6
  | 1) Bildbeschreibung =                                
  | 2) Fabrikat = SONY
  | 3) Modell = ILCE-6000
  | 4) Orientierung = 1
  | 5) XAuflösung = 72 (72/1)
  | 6) YAuflösung = 72 (72/1)
  | 7) Auflösungseinheit = 2
  | 8) Software = ILCE-6000 v3.20
  | 9) Änderungsdatum = 2018:05:11 08:35:11
  | 10) Miniaturbild-Offset = 38476
  | 11) Miniaturbildlänge = 6426
  | 12) YCbCrPositionierung = 2
JPEG APP1 (2825 Bytes):
  + [XMP-Verzeichnis, 2796 Bytes]
  | XMPToolkit = XMP Core 4.4.0-Exiv2
  | Software = digiKam-5.6.0
  | CreatorTool = digiKam-5.6.0
  | Bildunterschrift = Grand Canyon-Parashant National Monument, entlang der Clayhole Road
  | Titel = Grand Canyon-Parashant National Monument, entlang der Clayhole Road
JPEG APP13 (126 Bytes):
  + [Photoshop-Verzeichnis, 112 Bytes]
  | IPTCData (Unterverzeichnis) -->
  | + [IPTC-Verzeichnis, 99 Bytes]
  | | CurrentIPTCDigest = ~.g..z....3P}R..
  | | -- IPTCEnvelope-Eintrag --
  | | CodedCharacterSet = .%G
  | | -- IPTCApplication record --
  | | OriginatingProgram = digiKam
  | | Programmversion = 5.6.0
  | | ObjectName = Grand Canyon-Parashant National Monument, entlang der Clayhole Roa
JPEG APP2 (156 Bytes):
  + [MPF0 Verzeichnis mit 3 Einträgen]
  | 0) MPFVersion = 0100
  | 1) AnzahlBilder = 2
  | 2) MPImageList (Unterverzeichnis) -->
  | + [BinaryData-Verzeichnis, 16 Bytes]
  | | MPImageFlags = 2684354560
  | | MPImageFormat = 0
  | | MPImageType = 196608
  | | MPImageLength = 8768466
  | | MPImageStart = 0
  | | AbhängigesBild1Eintragsnummer = 2
  | | AbhängigesBild2Eintragsnummer = 0
  | + [BinaryData-Verzeichnis, 16 Bytes]
  | | MPImageFlags = 1073741824
  | | MPImageFormat = 0
  | | MPImageType = 65538
  | | MPImageLength = 664145
  | | MPImageStart = 8724632
  | | AbhängigesBild1Eintragsnummer = 0
  | | AbhängigesBild2Eintragsnummer = 0
JPEG-DQT (130 Byte):
JPEG-DHT (416 Byte):
JPEG SOF0 (15 Bytes):
  Bildbreite = 6000
  Bildhöhe = 4000
  EncodingProcess = 0
  Bit pro Abtastung = 8
  Farbkomponenten = 3
JPEG-SOS
  Warnung = [minor] Fehler beim Lesen von PreviewImage
  PreviewImage = SCALAR(0x19b5ab8)

Welche Tools gibt es, um Sensorstaub automatisch digital aus einer großen Fotoserie zu entfernen? Ich habe Hunderte von betroffenen Fotos (im Wesentlichen alles, was mit F/8 oder kleiner aufgenommen wurde). Es ist am offensichtlichsten, wenn sich die betroffene Region am Himmel befindet, sodass eine Lösung, die nur für den Himmel funktioniert, zufriedenstellend ist. Unter der Annahme, dass sich der Staub nicht zu weit bewegt, sollte es möglich sein, eine Art Matching-Technik zu verwenden, um für jedes Foto eine neue Maske zu berechnen, bevor sie durch Inpainting oder eine andere Methode angewendet wird. Obwohl dies theoretisch einfach ist, kann die Implementierung in der Praxis ziemlich mühsam sein – und ich bin mir nicht einmal sicher, ob Inpainting eine gute Lösung ist.

Abgesehen von der manuellen Reparatur jedes Fotos (es dauert allein auf meinem alten Desktop 4 Minuten Rechenzeit), welche Tools gibt es, um meine gesamte Fotoserie zu reparieren (oder zumindest die, die mit F / 8 oder kleiner mit Himmel in den betroffenen Bereichen aufgenommen wurden) ?

Ich arbeite unter Linux und mein übliches Toolkit besteht aus Digikam, Darktable, Gimp und Python. Die Kamera ist eine ziemlich neue Sony A6000 (spiegellose / kompakte Systemkamera). Einige Fotos wurden mit einem OSS-Objektiv von Sony 18–200 mm aufgenommen, andere mit einem manuellen 12-mm-Objektiv von Samyang.

Oh Mann – noch ein Job für ML!
@mattdm ML = Maschinelles Lernen? Ich nehme an, es ist!
Ja. Ich denke, es ist an der Zeit, einen Wettpool zu gründen, wenn diese Seite mit ai.stackexchange.com zusammengeführt wird :)
@xiota Ich habe die Frage bearbeitet: Sony A6000; Ich bin mir ziemlich sicher, dass es Sensorstaub ist, weil er sich im Urlaub angesammelt hat, mit einer Lupe sichtbar war und nach einer professionellen Sensorreinigung verschwunden ist. Ich nehme an, es ist der Staub, der sich relativ zum Sensor bewegt, aber ich habe noch nie von IBIS gehört. Eine transparente Platte vor dem Sensor, die sich um 50–100 µm verschieben darf?
@xiota Ich bin neu bei align_image_stack— ich werde sehen, ob es mir helfen kann!
Ist die Bildstabilisierungsverschiebung in den Metadaten enthalten? Vielleicht könnten Sie das verwenden, um die Übersetzung des Staubs rückgängig zu machen. Wie wäre es alternativ mit einem Skript, das Sie auffordert, die Karte zu lokalisieren, indem Sie in jedem Bild in die Mitte des größten Staubflecks klicken? Sie müssten immer noch auf jedes Bild klicken, aber das wäre ein Klick statt Hunderte. Ich würde auch maschinelles Lernen vorschlagen, aber ich denke, das ist ein Tabuthema in diesen Teilen.
@PhotoScientist Ich weiß nicht, ob Details zur Bildstabilisierung enthalten sind. Ich glaube nicht, aber ich habe der Frage die vollständigen Exif-Header hinzugefügt. Das Skript kann eine gute Idee sein – wenn es tatsächlich auf die Bildstabilisierung oder eine Art Korrektur zurückzuführen ist und nicht auf Staub, der sich bewegt, kann die Verschiebung für einen die Verschiebung für die anderen eindeutig identifizieren. Ich wüsste nicht, warum maschinelles Lernen ein Tabuthema sein sollte, aber ich befürchte, dass ich auf die allgemeine Problemfalle tappe und dass es weniger Arbeit ist, die Korrekturen manuell durchzuführen.
@gerrit ich glaube du hast recht. Es scheint wahrscheinlich, dass Sie weniger Zeit brauchen würden, um die spezifischste ML-Lösung zu finden, als ich gebraucht habe, um dies einzugeben. Trotzdem würde die Umsetzung wahrscheinlich mehr Zeit in Anspruch nehmen als die manuelle Bearbeitung jedes Fotos und würde sich daher nur lohnen, wenn Sie damit Geld verdienen. Ich nehme an, so entsteht Shareware überhaupt erst. Bei Tabuthemen versuche ich einfach, den Willen der Menschen zu respektieren. Codierungslösungen für Fotoprobleme kommen hier nicht allgemein gut an.

Antworten (1)

So etwas hat derzeit keine technische Lösung - ich denke, Sie müssen es manuell tun oder auf eine AI/ML-gestützte Lösung warten.

Davon abgesehen könnten Sie mit diesem Tool einige Erfolge erzielen:

http://www.batchcrop.com/dust-spot-removal.php

Es kostet 49 $.

Am Ende habe ich es manuell (mit Darktable) gemacht, es hat lange gedauert, aber ich habe viele Urlaubsfotos gut und detailliert betrachtet!