Bagaimana saya bisa secara otomatis menghapus bintik-bintik debu sensor bergeser dari serangkaian besar foto?

8

Saat berada di gurun, sensor saya menjadi berdebu. Saya keluar selama berminggu-minggu dan tidak melihat ini sampai akhir perjalanan saya, jadi saya memiliki ratusan foto dengan kotoran sensor. Sepanjang liburan, debu berangsur-angsur memburuk karena saya sering mengganti lensa. Setelah liburan saya, sensor saya dibersihkan secara profesional dan foto-foto baru tidak memiliki bintik-bintik, tetapi saya sedang mencari solusi untuk foto-foto liburan.

Untuk membersihkan foto-foto saya, saya menggunakan The Gimp untuk menghasilkan topeng dari lokasi-lokasi potongan debu terburuk:

lokasi debu terburuk

lalu gunakan gmic untuk menghapusnya dari commandline:

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

Meskipun ini bukan solusi optimal karena pada dasarnya mengecat area-area tersebut dari awal (tanpa menggunakan informasi latar belakang), ini memberikan hasil yang memuaskan di langit biru. Saya pikir dengan cara ini, saya bisa mengotomatiskan proses selama ratusan gambar yang terpengaruh. Sayangnya, debu tidak diam sehingga ini tidak berfungsi. Ini bergeser sekitar dengan urutan 20 piksel, yang sesuai dengan sekitar 80 μm. Saya tidak tahu apakah ini disebabkan oleh debu yang berpindah secara fisik, atau apakah mungkin karena pemrosesan gambar dalam kamera seperti stabilisasi gambar atau koreksi lensa. Saya telah mengambil beberapa gambar baik mentah maupun JPEG, dan untuk gambar-gambar itu saya bisa melihat sedikit perubahan bentuk gambar.

Ini sangat halus, tetapi jika Anda membandingkan dua gambar berikut, potongan debu terbesar dan paling menonjol telah berubah dari terpusat pada piksel (1677, 619)menjadi terpusat pada piksel (1655, 603). Di sisi lain, piksel yang kurang menonjol di kanan telah bergeser dari (4919, 1485)ke (4940, 1483). Mungkin seharusnya tidak terlalu mengejutkan bahwa potongan-potongan debu dapat dan bergeser relatif terhadap sensor?

Gambar 1 dengan debu di langit

Gambar 2 dengan debu di langit

Foto diambil sekitar 90 menit terpisah. Gambar yang saya posting downsampled oleh faktor 2.

Data EXIF ​​mencakup data Sony Makernote, yang dapat mencakup informasi tentang stabilisasi gambar, seperti ImageStabilization = 1. Saya tidak tahu apakah itu termasuk rincian lebih lanjut tentang stabilisasi gambar. Itu memang termasuk bidang Sony_0x201f = 128 17 2 0, yang tampaknya bervariasi antara gambar, tetapi identik antara dua gambar yang ditunjukkan di atas, sehingga tidak (secara unik) mengidentifikasi informasi untuk memperbaiki stabilisasi gambar. Saya tidak tahu apakah ada bidang lain yang melakukannya. Data exif lengkap (seperti yang dilaporkan oleh exiftool -v) untuk satu gambar menunjukkan:

  ExifToolVersion = 10.10
  FileName = 08-35-11.jpg
  Direktori =.
  FileSize = 9440161
  FileModifyDate = 1528067625
  FileAccessDate = 1529519016
  FileInodeChangeDate = 1528150970
  FilePermissions = 33204
  FileType = JPEG
  FileTypeExtension = JPG
  Jenis MIMET = gambar / jpeg
JPEG APP1 (44908 bytes):
  ExifByteOrder = II
  + [Direktori IFD0 dengan 13 entri]
  | 0) ProcessingSoftware = digiKam-5.6.0
  | 1) ImageDescription =                                
  | 2) Buat = SONY
  | 3) Model = ILCE-6000
  | 4) Orientasi = 1
  | 5) XResolusi = 350 (350/1)
  | 6) YResolution = 350 (350/1)
  | 7) ResolutionUnit = 2
  | 8) Perangkat Lunak = ILCE-6000 v3.20
  | 9) ModifyDate = 2018: 05: 11 08:35:11
  | 10) YCbCrPositioning = 2
  | 11) ExifOffset (SubDirektori) ->
  | + [Direktori ExifIFD dengan 38 entri]
  | | 0) ExposureTime = 0,003125 (1/320)
  | | 1) FNumber = 11 (110/10)
  | | 2) ExposureProgram = 3
  | | 3) ISO = 100
  | | 4) SensitivityType = 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 (SubDirectory) ->
  | | + [Direktori MakerNotes dengan 94 entri]
  | | | 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) Nilai = 0
  | | | 4) Sony_0x2003 =
  | | | 5) Kontras = 0
  | | | 6) Saturasi = 0
  | | | 7) Ketajaman = 0
  | | | 8) Kecerahan = 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 (SubDirektori) ->
  | | | + [Direktori BinaryData, 390 byte]
  | | | | FaceInfoOffset = 94
  | | | | SonyDateTime = 2018: 05: 11 08:35:11
  | | | | SonyImageHeight = 4000
  | | | | SonyImageWidth = 6000
  | | | | FacesDetected = 0
  | | | | FaceInfoLength = 37
  | | | | MetaVersion = DC7303320222000
  | | | 16) CreativeStyle = Standar
  | | | 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) Kualitas = 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) LateralChromaticAberration = 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
  | | | 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) ExposureMode = 7
  | | | 59) Sony_0xb045 = 0
  | | | 60) Sony_0xb046 = 0
  | | | 61) JPEGKualitas = 65535
  | | | 62) FlashLevel = 0
  | | | 63) ReleaseMode = 0
  | | | 64) SequenceNumber = 0
  | | | 65) Anti-Buram = 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 (SubDirektori) ->
  | | | + [Direktori BinaryData, 556 byte]
  | | | | ReleaseMode2 = 0
  | | | | ShotNumberSincePowerUp = 2
  | | | | SequenceImageNumber = 0
  | | | | SequenceLength = 1
  | | | | SequenceFileNumber = 0
  | | | | SequenceLength = 1
  | | | | CameraOrientation = 1
  | | | | Kualitas2 = 0
  | | | | SonyImageHeight = 500
  | | | | ModelReleaseYear = 14
  | | | 75) Sony_0x9401 = ..f .... pW ..). 6Q. \. (. GG..6 \ 6.GG..6 \ 6 .. $ .......... ^. ..3..s. [Snip]
  | | | 76) Tag9402 (SubDirektori) ->
  | | | + [Direktori BinaryData, 400 byte]
  | | | | AmbientTemperature = 21
  | | | | FocusMode = 2
  | | | | AFAreaMode = 1
  | | | | FocusPosition2 = 202
  | | | 77) Tag9403 (SubDirektori) ->
  | | | + [Direktori BinaryData, 1000 byte]
  | | | 78) Tag9404b (SubDirektori) ->
  | | | + [Direktori BinaryData, 556 byte]
  | | | | LensZoomPosition = 27
  | | | 79) Tag9405b (SubDirektori) ->
  | | | + [Direktori BinaryData, 1992 byte]
  | | | | SonyISO = 4096
  | | | | BaseISO = 4096
  | | | | StopsAboveBaseISO = 4096
  | | | | SonyExposureTime2 = 6208
  | | | | ExposureTime = 0,003125
  | | | | SonyFNumber = 5888
  | | | | SonyMaxApertureValue = 5054
  | | | | SequenceImageNumber = 0
  | | | | ReleaseMode2 = 0
  | | | | HighISONoiseReduction = 2
  | | | | LongExposureNoiseReduction = 1
  | | | | PictureEffect2 = 0
  | | | | Program Paparan = 1
  | | | | CreativeStyle = 0
  | | | | Ketajaman = 0
  | | | | DistortionCorrection = 0
  | | | | LensFormat = 1
  | | | | LensMount = 2
  | | | | LensType2 = 32787
  | | | | LensZoomPosition = 27
  | | | 80) Tag9406 (SubDirektori) ->
  | | | + [Direktori 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. (.... Saya ......... `... s .......... i7. @. Sp ......> ... ..... @ .......... z ...% ...>. [snip]
  | | | 86) Tag940c (SubDirektori) ->
  | | | + [Direktori BinaryData, 64 byte]
  | | | | LensMount2 = 4
  | | | | LensType3 = 32787
  | | | | CameraE-mountVersion = 336
  | | | | LensE-mountVersion = 263
  | | | | LensFirmwareVersion = 1
  | | | 87) Sony_0x940d = ...... g ...... z ...? .. u ............. PERGI ..... qUx ... ? .... el .... 8 [snip]
  | | | 88) Tag940e (SubDirektori) ->
  | | | + [Direktori BinaryData, 12288 byte]
  | | | 89) Sony_0xa100 =
  | | | 90) Tag2010g (SubDirektori) ->
  | | | + [Direktori BinaryData, 6556 byte]
  | | | | ReleaseMode2 = 0
  | | | | DynamicRangeOptimizer = 1
  | | | | ReleaseMode3 = 0
  | | | | ReleaseMode2 = 0
  | | | | FlashMode = 1
  | | | | StopsAboveBaseISO = 4096
  | | | | BrightnessValue = 17245
  | | | | DynamicRangeOptimizer = 1
  | | | | Pengaturan HDR = 0
  | | | | ExposureCompensation = 0
  | | | | PictureProfile = 0
  | | | | PictureProfile = 0
  | | | | PictureEffect2 = 0
  | | | | Kualitas2 = 0
  | | | | MeteringMode = 0
  | | | | Program Paparan = 1
  | | | | WB_RGBLevels = 690 256 427
  | | | | Panjang Fokus = 180
  | | | | MinFocalLength = 180
  | | | | MaxFocalLength = 2000
  | | | | SonyISO = 4096
  | | | | LensFormat = 1
  | | | | LensMount = 2
  | | | | LensType2 = 32787
  | | | 91) Sony_0x940f = liVi. $ ........) .... @ .. f ......... & .... @ ... Y @) .. Y @. @...........[menggunting]
  | | | 92) Tag9050 (SubDirektori) ->
  | | | + [Direktori BinaryData, 944 bytes]
  | | | | FlashStatus = 64
  | | | | ImageCount = 3836
  | | | | SonyFNumber = 5888
  | | | | ReleaseMode2 = 0
  | | | | ImageCount2 = 3836
  | | | | SonyDateTime2 = .... #.
  | | | | ReleaseMode2 = 0
  | | | | InternalSerialNumber = 162 254 226 13
  | | | | LensMount = 2
  | | | | LensFormat = 1
  | | | | LensType2 = 32787
  | | | | LensSpecFeatures =.
  | | | | ImageCount3 = 44765
  | | | 93) Sony_0x9412 = ... @. V ........................................ ...............[menggunting]
  | | 19) UserComment =
  | | 20) FlashpixVersion = 0100
  | | 21) ColorSpace = 1
  | | 22) ExifImageWidth = 6000
  | | 23) ExifImageHeight = 4000
  | | 24) InteropOffset (SubDirectory) ->
  | | + [Direktori InteropIFD dengan 2 entri]
  | | | 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) Kontras = 0
  | | 34) Saturasi = 0
  | | 35) Ketajaman = 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 (SubDirektori) ->
  | + [Direktori PrintIM dengan 3 entri]
  | | PrintIMVersion = 0300
  | | 0) PrintIM_0x0002 = 1
  | | 1) PrintIM_0x0003 = 34
  | | 2) PrintIM_0x0101 = 0
  + [Direktori IFD1 dengan 13 entri]
  | 0) Kompresi = 6
  | 1) ImageDescription =                                
  | 2) Buat = SONY
  | 3) Model = ILCE-6000
  | 4) Orientasi = 1
  | 5) XResolusi = 72 (72/1)
  | 6) YResolution = 72 (72/1)
  | 7) ResolutionUnit = 2
  | 8) Perangkat Lunak = ILCE-6000 v3.20
  | 9) ModifyDate = 2018: 05: 11 08:35:11
  | 10) ThumbnailOffset = 38476
  | 11) ThumbnailLength = 6426
  | 12) YCbCrPositioning = 2
JPEG APP1 (2825 byte):
  + [Direktori XMP, 2796 byte]
  | XMPToolkit = XMP Core 4.4.0-Exiv2
  | Perangkat lunak = digiKam-5.6.0
  | CreatorTool = digiKam-5.6.0
  | Keterangan Gambar: Monumen Nasional Grand Canyon-Parashant, di sepanjang Jalan Clayhole
  | Judul = Monumen Nasional Parashant-Grand Canyon, di sepanjang Jalan Clayhole
JPEG APP13 (126 byte):
  + [Direktori Photoshop, 112 byte]
  | IPTCData (SubDirektori) ->
  | + [Direktori IPTC, 99 byte]
  | | CurrentIPTCDigest = ~ .g..z .... 3P} R ..
  | | - Catatan IPTCEnvelope -
  | | CodedCharacterSet =.% G
  | | - Catatan aplikasi IPTCA -
  | | OriginatingProgram = digiKam
  | | ProgramVersion = 5.6.0
  | | ObjectName = Monumen Nasional Grand Canyon-Parashant, di sepanjang Clayhole Roa
JPEG APP2 (156 byte):
  + [Direktori MPF0 dengan 3 entri]
  | 0) MPFVersion = 0100
  | 1) NumberOfImages = 2
  | 2) MPImageList (SubDirectory) ->
  | + [Direktori BinaryData, 16 byte]
  | | MPImageFlags = 2684354560
  | | MPImageFormat = 0
  | | MPImageType = 196608
  | | MPImageLength = 8768466
  | | MPImageStart = 0
  | | DependentImage1EntryNumber = 2
  | | DependentImage2EntryNumber = 0
  | + [Direktori BinaryData, 16 byte]
  | | MPImageFlags = 1073741824
  | | MPImageFormat = 0
  | | MPImageType = 65538
  | | MPImageLength = 664145
  | | MPImageStart = 8724632
  | | DependentImage1EntryNumber = 0
  | | DependentImage2EntryNumber = 0
JPEG DQT (130 byte):
JPEG DHT (416 bytes):
JPEG SOF0 (15 byte):
  ImageWidth = 6000
  ImageHeight = 4000
  EncodingProcess = 0
  BitsPerSample = 8
  ColorComponents = 3
JPEG SOS
  Warning = [minor] Kesalahan membaca PreviewImage
  PreviewImage = SCALAR (0x19b5ab8)

Alat apa yang ada untuk secara otomatis menghilangkan debu sensor dari serangkaian besar foto? Saya memiliki ratusan foto yang terpengaruh (pada dasarnya apa pun yang diambil pada F / 8 atau lebih kecil). Paling jelas ketika wilayah yang terkena dampak berada di langit, jadi solusi yang hanya bekerja untuk langit memuaskan. Dengan asumsi bahwa debu tidak bergerak terlalu jauh, harus dimungkinkan untuk menggunakan semacam teknik pencocokan untuk menghitung topeng baru untuk setiap foto, sebelum menerapkannya menggunakan pewarnaan atau metode lain. Meskipun secara teori sederhana, penerapannya mungkin cukup sulit dalam praktiknya - dan saya bahkan tidak yakin apakah pewarnaan merupakan solusi yang baik.

Pendek memperbaiki secara manual setiap foto (butuh 4 menit waktu perhitungan sendirian di desktop lama saya), alat apa yang ada untuk memperbaiki seluruh seri foto saya (atau setidaknya yang diambil pada F / 8 atau lebih kecil dengan langit di daerah yang terkena) ?

Saya bekerja di Linux dan toolkit saya yang biasa terdiri dari digikam, darktable, gimp, dan Python. Kameranya adalah Sony A6000 yang cukup baru (mirrorless / compact system camera). Beberapa foto diambil dengan lensa OSS Sony 18–200mm, yang lain dengan lensa manual Samyang 12 mm.

gerrit
sumber
1
Oh man - pekerjaan lain untuk ML!
Silakan Baca Profil Saya
1
@mattdm ML = Pembelajaran Mesin? Saya kira begitu!
gerrit
3
Ya. Saya pikir ini saatnya untuk memulai kumpulan taruhan ketika situs ini akan bergabung ke ai.stackexchange.com :)
Silakan Baca Profil Saya
@xiota Saya telah mengedit pertanyaan: Sony A6000; Saya cukup yakin itu debu sensor karena menumpuk selama liburan, terlihat dengan kaca pembesar, dan menghilang setelah pembersihan sensor profesional. Saya kira itu debu yang bergerak relatif ke sensor, tapi saya belum pernah mendengar tentang IBIS sebelumnya. Beberapa pelat transparan di depan sensor yang dapat bergeser 50-100 μm?
gerrit
@xiota Saya baru ke align_image_stack- saya akan melihat apakah itu bisa membantu saya!
gerrit

Jawaban:

3

Sesuatu seperti ini saat ini tidak memiliki solusi teknis - Saya kira Anda perlu melakukannya secara manual atau menunggu solusi yang didukung AI / ML.

Dengan itu, Anda mungkin mencapai beberapa keberhasilan dengan alat ini:

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

Harganya $ 49.

Andreas Hartmann
sumber
2
Saya akhirnya melakukannya secara manual (dengan darktable), butuh waktu yang lama tapi saya mendapatkan banyak foto liburan yang bagus dan terperinci!
gerrit