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:
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?
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.
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 $.
mattdm
Gerrit
mattdm
Gerrit
Gerrit
align_image_stack
— ich werde sehen, ob es mir helfen kann!Fotowissenschaftler
Gerrit
Fotowissenschaftler