Come posso rimuovere automaticamente in modo digitale i granelli di polvere del sensore mobile da una grande serie di foto?


8

Mentre ero nel deserto, il mio sensore divenne polveroso. Sono stato fuori per settimane e non me ne sono accorto fino alla fine del mio viaggio, quindi ho centinaia di foto con la sporcizia del sensore. Durante la vacanza, la polvere peggiorava gradualmente man mano che cambiavo spesso lenti. Dopo la mia vacanza, il sensore è stato pulito professionalmente e le nuove foto non hanno punti, ma sto cercando una soluzione per le foto delle vacanze.

Per pulire le mie foto, ho usato The Gimp per produrre una maschera delle posizioni dei pezzi di polvere peggiori:

peggiori posizioni della polvere

quindi usato gmic per rimuoverli dalla riga di comando:

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

Sebbene questa non sia una soluzione ottimale perché essenzialmente ridisegna quelle aree da zero (senza utilizzare le informazioni di sfondo), fornisce risultati soddisfacenti nel cielo blu. Ho pensato che in questo modo, avrei potuto automatizzare il processo su centinaia di immagini interessate. Sfortunatamente, la polvere non è fissa, quindi non funziona. Si sposta di circa 20 pixel, che corrisponde a circa 80 µm. Non so se ciò sia dovuto alla polvere che si sposta fisicamente o se potrebbe essere dovuto all'elaborazione delle immagini all'interno della fotocamera come la stabilizzazione dell'immagine o la correzione dell'obiettivo. Ho scattato alcune immagini sia in formato raw che JPEG, e per quelle immagini posso vedere visivamente un leggero spostamento nella forma dell'immagine.

È molto sottile, ma se si confrontano le seguenti due immagini, il pezzo di polvere più grande e prominente si è spostato dal centrarsi sul pixel (1677, 619)al centrarsi sul pixel (1655, 603). Dall'altro lato, un pixel meno prominente sulla destra si è spostato da (4919, 1485)a (4940, 1483). Forse non dovrebbe essere troppo sorprendente che i pezzi di polvere possano spostarsi e spostarsi rispetto al sensore?

Immagine 1 con polvere nel cielo

Immagine 2 con polvere nel cielo

Le foto sono prese a circa 90 minuti di distanza. Le immagini che ho pubblicato sono sottocampionate per un fattore 2.

I dati EXIF ​​includono i dati Sony Makernote, che possono includere informazioni sulla stabilizzazione dell'immagine, come ad esempio ImageStabilization = 1. Non so se includa ulteriori dettagli sulla stabilizzazione dell'immagine. Include un campo Sony_0x201f = 128 17 2 0, che sembra variare tra le immagini, ma è identico tra le due immagini mostrate sopra, quindi non identifica (in modo univoco) le informazioni da correggere per la stabilizzazione dell'immagine. Non so se ci siano altri campi. I dati exif completi (come riportato da exiftool -v) per un'immagine mostrano:

  ExifToolVersion = 10.10
  FileName = 08-35-11.jpg
  Directory =.
  Dimensione file = 9440161
  FileModifyDate = 1528067625
  FileAccessDate = 1529519016
  FileInodeChangeDate = 1528150970
  FilePermissions = 33204
  Tipo file = JPEG
  FileTypeExtension = JPG
  MIMEType = image / jpeg
JPEG APP1 (44908 byte):
  ExifByteOrder = II
  + [Directory IFD0 con 13 voci]
  | 0) ProcessingSoftware = digiKam-5.6.0
  | 1) ImageDescription =                                
  | 2) Marca = SONY
  | 3) Modello = ILCE-6000
  | 4) Orientamento = 1
  | 5) Risoluzione X = 350 (350/1)
  | 6) YResolution = 350 (350/1)
  | 7) ResolutionUnit = 2
  | 8) Software = ILCE-6000 v3.20
  | 9) Modifica Data = 2018: 05: 11 08:35:11
  | 10) YCbCrPosition = 2
  | 11) ExifOffset (sottodirectory) ->
  | + [Directory ExifIFD con 38 voci]
  | | 0) Tempo di esposizione = 0,003125 (1/320)
  | | 1) FNumber = 11 (110/10)
  | | 2) Programma di esposizione = 3
  | | 3) ISO = 100
  | | 4) Sensibilità Tipo = 2
  | | 5) RecommendedExposureIndex = 100
  | | 6) ExifVersion = 0230
  | | 7) DateTimeOriginal = 2018: 05: 11 08:35:11
  | | 8) CreateDate = 2018: 05: 11 08:35:11
  | | 9) ComponentsConfiguration = 1 2 3 0
  | | 10) CompressedBitsPerPixel = 3 (3/1)
  | | 11) BrightnessValue = 10.76328125 (27554/2560)
  | | 12) ExposureCompensation = 0 (0/10)
  | | 13) MaxApertureValue = 3.6171875 (926/256)
  | | 14) MeteringMode = 5
  | | 15) LightSource = 0
  | | 16) Flash = 16
  | | 17) FocalLength = 18 (180/10)
  | | 18) MakerNoteSony (Sottodirectory) ->
  | | + [Directory MakerNotes con 94 voci]
  | | | 0) Sony_0x1003 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  | | | 1) Sony_0x2000 = 0
  | | | 2) PreviewImage =
  | | | 3) Valutazione = 0
  | | | 4) Sony_0x2003 =
  | | | 5) Contrasto = 0
  | | | 6) Saturazione = 0
  | | | 7) Nitidezza = 0
  | | | 8) Luminosità = 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 (sottodirectory) ->
  | | | + [Directory BinaryData, 390 byte]
  | | | | FaceInfoOffset = 94
  | | | | SonyDateTime = 2018: 05: 11 08:35:11
  | | | | SonyImageHeight = 4000
  | | | | SonyImageWidth = 6000
  | | | | FacesDetected = 0
  | | | | FaceInfoLength = 37
  | | | | MetaVersion = DC7303320222000
  | | | 16) CreativeStyle = Standard
  | | | 17) ColorTemperature = 0
  | | | 18) ColorCompensationFilter = 0
  | | | 19) SceneMode = 0
  | | | 20) ZoneMatching = 0
  | | | 21) DynamicRangeOptimizer = 3
  | | | 22) ImageStabilization = 1
  | | | 23) ColorMode = 0
  | | | 24) FullImageSize = 4000 6000
  | | | 25) PreviewImageSize = 1080 1616
  | | | 26) FileFormat = 3 3 1 0
  | | | 27) Qualità = 2
  | | | 28) FlashExposureComp = 0 (0/10)
  | | | 29) WhiteBalanceFineTune = 0
  | | | 30) WhiteBalance = 0
  | | | 31) SonyModelID = 312
  | | | 32) Teleconverter = 0
  | | | 33) MultiFrameNoiseReduction = 0
  | | | 34) PictureEffect = 0
  | | | 35) SoftSkinEffect = 0
  | | | 36) VignettingCorrection = 2
  | | | 37) Aberrazione cromatica laterale = 2
  | | | 38) DistortionCorrectionSetting = 0
  | | | 39) Sony_0x2015 = 65535
  | | | 40) LensType = 65535
  | | | 41) LensSpec = ... 5c
  | | | 42) AutoPortraitFramed = 0
  | | | 43) FlashAction = 0
  | | | 44) Sony_0x2018 = 0
  | | | 45) Sony_0x2019 = 0
  | | | 46) Sony_0x201a = 1
  | | | 47) FocusMode = 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 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 0
  | | | 55) Sony_0x2023 = 0
  | | | 56) Sony_0x5001 = 0 (0/1000)
  | | | 57) Sony_0x5002 = 128
  | | | 58) ExposureMode = 7
  | | | 59) Sony_0xb045 = 0
  | | | 60) Sony_0xb046 = 0
  | | | 61) Qualità JPEG = 65535
  | | | 62) FlashLevel = 0
  | | | 63) ReleaseMode = 0
  | | | 64) SequenceNumber = 0
  | | | 65) Antisfocatura = 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) WhiteBalance = 0
  | | | 74) Tag9400c (sottodirectory) ->
  | | | + [Directory BinaryData, 556 byte]
  | | | | ReleaseMode2 = 0
  | | | | ShotNumberSincePowerUp = 2
  | | | | SequenceImageNumber = 0
  | | | | SequenceLength = 1
  | | | | SequenceFileNumber = 0
  | | | | SequenceLength = 1
  | | | | CameraOrientation = 1
  | | | | Qualità2 = 0
  | | | | SonyImageHeight = 500
  | | | | ModelReleaseYear = 14
  | | | 75) Sony_0x9401 = ..f .... pW ..). 6Q. \. (. GG..6 \ 6.GG..6 \ 6 .. $ .......... ^. ..3..s. [omissis]
  | | | 76) Tag9402 (sottodirectory) ->
  | | | + [Directory BinaryData, 400 byte]
  | | | | AmbientTemperature = 21
  | | | | FocusMode = 2
  | | | | AFAreaMode = 1
  | | | | FocusPosition2 = 202
  | | | 77) Tag9403 (sottodirectory) ->
  | | | + [Directory BinaryData, 1000 byte]
  | | | 78) Tag9404b (sottodirectory) ->
  | | | + [Directory BinaryData, 556 byte]
  | | | | LensZoomPosition = 27
  | | | 79) Tag9405b (sottodirectory) ->
  | | | + [Directory BinaryData, 1992 byte]
  | | | | SonyISO = 4096
  | | | | BaseISO = 4096
  | | | | StopsAboveBaseISO = 4096
  | | | | SonyExposureTime2 = 6208
  | | | | Tempo di esposizione = 0,003125
  | | | | SonyFNumber = 5888
  | | | | SonyMaxApertureValue = 5054
  | | | | SequenceImageNumber = 0
  | | | | ReleaseMode2 = 0
  | | | | HighISONoiseReduction = 2
  | | | | LongExposureNoiseReduction = 1
  | | | | PictureEffect2 = 0
  | | | | Programma di esposizione = 1
  | | | | CreativeStyle = 0
  | | | | Nitidezza = 0
  | | | | DistortionCorrection = 0
  | | | | LensFormat = 1
  | | | | LensMount = 2
  | | | | LensType2 = 32787
  | | | | LensZoomPosition = 27
  | | | 80) Tag9406 (sottodirectory) ->
  | | | + [Directory BinaryData, 64 byte]
  | | | | BatteryTemperature = 87
  | | | | BatteryLevel = 55
  | | | 81) Sony_0x9407 = .2WW. ^ .... AT..W ..>. WSi ... lw ... W ............. T..i .... ... T .... Wl
  | | | 82) Sony_0x9408 = i .... * ...... \ ... * ..} ...... u} .. C. = .. @. [. 8k. & ... | ...... C ^ .. pp .. [snip]
  | | | 83) Sony_0x9409 =. ... l. (.... io ......... `s ... .......... i7. @. Sp ......> ... ..... @ .......... z ...% ...>. [omissis]
  | | | 86) Tag940c (sottodirectory) ->
  | | | + [Directory BinaryData, 64 byte]
  | | | | LensMount2 = 4
  | | | | LensType3 = 32787
  | | | | CameraE-mountVersion = 336
  | | | | LensE-mountVersion = 263
  | | | | LensFirmwareVersion = 1
  | | | 87) Sony_0x940d = ...... g ...... z ...? .. u ............. GO.D ..... qUx ... ? .... el .... 8 [snip]
  | | | 88) Tag940e (sottodirectory) ->
  | | | + [Directory BinaryData, 12288 byte]
  | | | 89) Sony_0xa100 =
  | | | 90) Tag2010g (sottodirectory) ->
  | | | + [Directory BinaryData, 6556 byte]
  | | | | ReleaseMode2 = 0
  | | | | DynamicRangeOptimizer = 1
  | | | | ReleaseMode3 = 0
  | | | | ReleaseMode2 = 0
  | | | | FlashMode = 1
  | | | | StopsAboveBaseISO = 4096
  | | | | BrightnessValue = 17245
  | | | | DynamicRangeOptimizer = 1
  | | | | Impostazione HDRS = 0
  | | | | ExposureCompensation = 0
  | | | | PictureProfile = 0
  | | | | PictureProfile = 0
  | | | | PictureEffect2 = 0
  | | | | Qualità2 = 0
  | | | | MeteringMode = 0
  | | | | Programma di esposizione = 1
  | | | | WB_RGBLevels = 690 256 427
  | | | | FocalLength = 180
  | | | | MinFocalLength = 180
  | | | | MaxFocalLength = 2000
  | | | | SonyISO = 4096
  | | | | LensFormat = 1
  | | | | LensMount = 2
  | | | | LensType2 = 32787
  | | | 91) Sony_0x940f = liVi. $ ........) .... @ .. f ......... & .... @ ... Y @) .. Y @. @ ........... [snip]
  | | | 92) Tag9050 (sottodirectory) ->
  | | | + [Directory BinaryData, 944 byte]
  | | | | FlashStatus = 64
  | | | | ImageCount = 3836
  | | | | SonyFNumber = 5888
  | | | | ReleaseMode2 = 0
  | | | | ImageCount2 = 3836
  | | | | SonyDateTime2 = .... #.
  | | | | ReleaseMode2 = 0
  | | | | InternalSerialNumber = 162254 226 13
  | | | | LensMount = 2
  | | | | LensFormat = 1
  | | | | LensType2 = 32787
  | | | | LensSpecFeatures =.
  | | | | ImageCount3 = 44765
  | | | 93) Sony_0x9412 = ... @. V ........................................ ............... [snip]
  | | 19) UserComment =
  | | 20) FlashpixVersion = 0100
  | | 21) ColorSpace = 1
  | | 22) ExifImageWidth = 6000
  | | 23) ExifImageHeight = 4000
  | | 24) InteropOffset (sottodirectory) ->
  | | + [Directory InteropIFD con 2 voci]
  | | | 0) InteropIndex = R98
  | | | 1) InteropVersion = 0100
  | | 25) FileSource = 3
  | | 26) SceneType = 1
  | | 27) CustomRendered = 0
  | | 28) ExposureMode = 0
  | | 29) WhiteBalance = 0
  | | 30) DigitalZoomRatio = 1 (16/16)
  | | 31) FocalLengthIn35mmFormat = 27
  | | 32) SceneCaptureType = 0
  | | 33) Contrasto = 0
  | | 34) Saturazione = 0
  | | 35) Nitidezza = 0
  | | 36) LensInfo = 18.200 3,5 6,3 (180/10 2000/10 35/10 63/10)
  | | 37) LensModel = E 18-200mm F3.5-6.3 OSS
  | 12) PrintIM (sottodirectory) ->
  | + [Directory PrintIM con 3 voci]
  | | PrintIMVersion = 0300
  | | 0) PrintIM_0x0002 = 1
  | | 1) PrintIM_0x0003 = 34
  | | 2) PrintIM_0x0101 = 0
  + [Directory IFD1 con 13 voci]
  | 0) Compressione = 6
  | 1) ImageDescription =                                
  | 2) Marca = SONY
  | 3) Modello = ILCE-6000
  | 4) Orientamento = 1
  | 5) Risoluzione X = 72 (72/1)
  | 6) YResolution = 72 (72/1)
  | 7) ResolutionUnit = 2
  | 8) Software = ILCE-6000 v3.20
  | 9) Modifica Data = 2018: 05: 11 08:35:11
  | 10) ThumbnailOffset = 38476
  | 11) ThumbnailLength = 6426
  | 12) YCbCrPosition = 2
JPEG APP1 (2825 byte):
  + [Directory XMP, 2796 byte]
  | XMPToolkit = XMP Core 4.4.0-Exiv2
  | Software = digiKam-5.6.0
  | CreatorTool = digiKam-5.6.0
  | Didascalia = Grand Canyon-Parashant National Monument, lungo la Clayhole Road
  | Titolo = Grand Canyon-Parashant National Monument, lungo la Clayhole Road
JPEG APP13 (126 byte):
  + [Directory di Photoshop, 112 byte]
  | IPTCData (sottodirectory) ->
  | + [Directory IPTC, 99 byte]
  | | CurrentIPTCDigest = ~ .g..z .... 3P} R ..
  | | - Record IPTCEnvelope -
  | | CodedCharacterSet =.% G
  | | - Record di applicazioni IPTCA -
  | | OriginatingProgram = digiKam
  | | ProgramVersion = 5.6.0
  | | ObjectName = Monumento nazionale del Grand Canyon-Parashant, lungo il Clayhole Roa
JPEG APP2 (156 byte):
  + [Directory MPF0 con 3 voci]
  | 0) MPFVersion = 0100
  | 1) NumberOfImages = 2
  | 2) MPImageList (SubDirectory) ->
  | + [Directory BinaryData, 16 byte]
  | | MPImageFlags = 2684354560
  | | MPImageFormat = 0
  | | MPImageType = 196608
  | | MPImageLength = 8768466
  | | MPImageStart = 0
  | | DependentImage1EntryNumber = 2
  | | DependentImage2EntryNumber = 0
  | + [Directory BinaryData, 16 byte]
  | | MPImageFlags = 1073741824
  | | MPImageFormat = 0
  | | MPImageType = 65538
  | | MPImageLength = 664145
  | | MPImageStart = 8724632
  | | DependentImage1EntryNumber = 0
  | | DependentImage2EntryNumber = 0
JPEG DQT (130 byte):
JPEG DHT (416 byte):
JPEG SOF0 (15 byte):
  ImageWidth = 6000
  ImageHeight = 4000
  EncodingProcess = 0
  BitsPerSample = 8
  ColorComponents = 3
JPEG SOS
  Warning = [minor] Errore durante la lettura di PreviewImage
  PreviewImage = SCALAR (0x19b5ab8)

Quali strumenti esistono per rimuovere automaticamente la polvere del sensore digitale da una grande serie di foto? Ho centinaia di foto interessate (essenzialmente qualsiasi cosa scattata a F / 8 o inferiore). È più ovvio quando la regione interessata è nel cielo, quindi una soluzione che funziona solo per il cielo è soddisfacente. Supponendo che la polvere non si sposti troppo , dovrebbe essere possibile utilizzare una sorta di tecnica di abbinamento per calcolare una nuova maschera per ogni foto, prima di applicarla usando la pittura o qualche altro metodo. Sebbene teoricamente semplice, implementarlo può essere abbastanza laborioso in pratica - e non sono nemmeno sicuro che la verniciatura sia una buona soluzione.

A meno di riparare manualmente ogni foto (ci vogliono solo 4 minuti di tempo di calcolo sul mio vecchio desktop), quali strumenti esistono per riparare la mia intera serie di foto (o almeno quelle scattate a F / 8 o più piccole con il cielo nelle aree interessate) ?

Lavoro su Linux e il mio solito toolkit è composto da digikam, darktable, gimp e Python. La fotocamera è una Sony A6000 abbastanza nuova (fotocamera mirrorless / compatta). Alcune foto sono state scattate con un obiettivo OSS Sony da 18-200 mm, altre con un obiettivo manuale Samyang da 12 mm.


1
Oh amico - un altro lavoro per ML!
Leggi il mio profilo il

1
@mattdm ML = Apprendimento automatico? Suppongo che lo sia!
Gerrit,

3
Si. Sto pensando che è tempo di iniziare un pool di scommesse per quando questo sito si fonderà in ai.stackexchange.com :)
Per favore, leggi il mio profilo

@xiota Ho modificato la domanda: Sony A6000; Sono abbastanza sicuro che sia la polvere del sensore perché si è accumulata durante le vacanze, era visibile con una lente d'ingrandimento ed è scomparsa dopo la pulizia professionale del sensore. Suppongo sia la polvere che si muove rispetto al sensore, ma non ho mai sentito parlare di IBIS prima. Qualche lastra trasparente di fronte al sensore che può spostarsi di 50–100 µm?
Gerrit,

@xiota Sono nuovo a align_image_stack: vedrò se mi può aiutare!
Gerrit,

Risposte:


3

Qualcosa del genere attualmente non ha una soluzione tecnica - immagino che sia necessario farlo manualmente o attendere una soluzione supportata da AI / ML.

Detto questo, potresti ottenere un certo successo con questo strumento:

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

Costa 49 $.


2
Ho finito per farlo manualmente (con darktable), ci è voluto molto tempo ma ho visto bene e in dettaglio molte foto delle vacanze!
Gerrit,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.