Находясь в пустыне, мой датчик запылялся. Я отсутствовал несколько недель и не заметил этого до конца моей поездки, поэтому у меня есть сотни фотографий с сенсором грязи. В течение каникул пыль постепенно ухудшалась, поскольку я часто менял линзы. После отпуска я профессионально почистил сенсор, и на новых фотографиях нет пятен, но я ищу решение для фотографий с отпуска.
Чтобы очистить мои фотографии, я использовал Gimp, чтобы создать маску из мест наихудших кусков пыли:
![worst dust locations](https://i.stack.imgur.com/af5dc.png)
затем использовал gmic, чтобы удалить их из командной строки:
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
Хотя это не оптимальное решение, поскольку оно по существу перерисовывает эти области с нуля (без использования фоновой информации), оно дает удовлетворительные результаты в синем небе. Я подумал, что таким образом я смогу автоматизировать процесс для сотен затронутых изображений. К сожалению, пыль не является стационарной , поэтому это не работает. Он сдвигается примерно на 20 пикселей, что соответствует примерно 80 мкм. Я не знаю, связано ли это с физическим смещением пыли, или это может быть связано с обработкой изображения в камере, такой как стабилизация изображения или коррекция объектива. Я сделал несколько снимков в необработанном виде и в формате JPEG, и для этих изображений я могу визуально увидеть небольшое изменение формы изображения.
Это очень тонко, но если вы сравните следующие два изображения, самый большой и наиболее заметный кусочек пыли переместился с центра на пиксель (1677, 619)
к центру на пикселе (1655, 603)
. С другой стороны, менее заметный пиксель справа переместился с (4919, 1485)
на (4940, 1483)
. Возможно, не должно быть слишком удивительно, что кусочки пыли могут и действительно перемещаться относительно датчика?
![Image 1 with dust in the sky](https://i.stack.imgur.com/G1hjw.jpg)
![Image 2 with dust in the sky](https://i.stack.imgur.com/NI90d.jpg)
Фотографии сделаны с интервалом примерно 90 минут. Изображения, которые я выложил, уменьшены в 2 раза.
Данные EXIF включают данные Sony Makernote, которые могут включать в себя информацию о стабилизации изображения, например ImageStabilization = 1
. Я не знаю, если это включает в себя дополнительные сведения о стабилизации изображения. Оно включает в себя поле Sony_0x201f = 128 17 2 0
, которое, по-видимому, варьируется между изображениями, но идентично для двух изображений, показанных выше, поэтому оно (уникальным образом) не идентифицирует информацию для коррекции для стабилизации изображения. Я не знаю, если какое-либо другое поле делает. Полные данные EXIF (как указано exiftool -v
) для одного изображения показывают:
ExifToolVersion = 10.10
FileName = 08-35-11.jpg
Directory = .
FileSize = 9440161
FileModifyDate = 1528067625
FileAccessDate = 1529519016
FileInodeChangeDate = 1528150970
FilePermissions = 33204
FileType = JPEG
FileTypeExtension = JPG
MIMEType = image/jpeg
JPEG APP1 (44908 bytes):
ExifByteOrder = II
+ [IFD0 directory with 13 entries]
| 0) ProcessingSoftware = digiKam-5.6.0
| 1) ImageDescription =
| 2) Make = SONY
| 3) Model = ILCE-6000
| 4) Orientation = 1
| 5) XResolution = 350 (350/1)
| 6) YResolution = 350 (350/1)
| 7) ResolutionUnit = 2
| 8) Software = ILCE-6000 v3.20
| 9) ModifyDate = 2018:05:11 08:35:11
| 10) YCbCrPositioning = 2
| 11) ExifOffset (SubDirectory) -->
| + [ExifIFD directory with 38 entries]
| | 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) -->
| | + [MakerNotes directory with 94 entries]
| | | 0) Sony_0x1003 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
| | | 1) Sony_0x2000 = 0
| | | 2) PreviewImage =
| | | 3) Rating = 0
| | | 4) Sony_0x2003 =
| | | 5) Contrast = 0
| | | 6) Saturation = 0
| | | 7) Sharpness = 0
| | | 8) Brightness = 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 (SubDirectory) -->
| | | + [BinaryData directory, 390 bytes]
| | | | 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) Quality = 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) JPEGQuality = 65535
| | | 62) FlashLevel = 0
| | | 63) ReleaseMode = 0
| | | 64) SequenceNumber = 0
| | | 65) Anti-Blur = 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 (SubDirectory) -->
| | | + [BinaryData directory, 556 bytes]
| | | | ReleaseMode2 = 0
| | | | ShotNumberSincePowerUp = 2
| | | | SequenceImageNumber = 0
| | | | SequenceLength = 1
| | | | SequenceFileNumber = 0
| | | | SequenceLength = 1
| | | | CameraOrientation = 1
| | | | Quality2 = 0
| | | | SonyImageHeight = 500
| | | | ModelReleaseYear = 14
| | | 75) Sony_0x9401 = ..f....pW..).6Q.\.(.G.G...6\6.G.G...6\6..$..........^...3..s.[snip]
| | | 76) Tag9402 (SubDirectory) -->
| | | + [BinaryData directory, 400 bytes]
| | | | AmbientTemperature = 21
| | | | FocusMode = 2
| | | | AFAreaMode = 1
| | | | FocusPosition2 = 202
| | | 77) Tag9403 (SubDirectory) -->
| | | + [BinaryData directory, 1000 bytes]
| | | 78) Tag9404b (SubDirectory) -->
| | | + [BinaryData directory, 556 bytes]
| | | | LensZoomPosition = 27
| | | 79) Tag9405b (SubDirectory) -->
| | | + [BinaryData directory, 1992 bytes]
| | | | 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
| | | | ExposureProgram = 1
| | | | CreativeStyle = 0
| | | | Sharpness = 0
| | | | DistortionCorrection = 0
| | | | LensFormat = 1
| | | | LensMount = 2
| | | | LensType2 = 32787
| | | | LensZoomPosition = 27
| | | 80) Tag9406 (SubDirectory) -->
| | | + [BinaryData directory, 64 bytes]
| | | | BatteryTemperature = 87
| | | | BatteryLevel = 55
| | | 81) Sony_0x9407 = .2WW.^....AT..W..>.WSi...lw...W.............T..i.......T....W.l.
| | | 82) Sony_0x9408 = i....*......\...*..}......u}..C.=..@.[.8k.&...|......C^..pp..[snip]
| | | 83) Sony_0x9409 = . ...l.(....I.........`...s..........i7.@.Sp......>........@..........z...%...>.[snip]
| | | 86) Tag940c (SubDirectory) -->
| | | + [BinaryData directory, 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[snip]
| | | 88) Tag940e (SubDirectory) -->
| | | + [BinaryData directory, 12288 bytes]
| | | 89) Sony_0xa100 =
| | | 90) Tag2010g (SubDirectory) -->
| | | + [BinaryData directory, 6556 bytes]
| | | | ReleaseMode2 = 0
| | | | DynamicRangeOptimizer = 1
| | | | ReleaseMode3 = 0
| | | | ReleaseMode2 = 0
| | | | FlashMode = 1
| | | | StopsAboveBaseISO = 4096
| | | | BrightnessValue = 17245
| | | | DynamicRangeOptimizer = 1
| | | | HDRSetting = 0
| | | | ExposureCompensation = 0
| | | | PictureProfile = 0
| | | | PictureProfile = 0
| | | | PictureEffect2 = 0
| | | | Quality2 = 0
| | | | MeteringMode = 0
| | | | ExposureProgram = 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 (SubDirectory) -->
| | | + [BinaryData directory, 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.......................................................[snip]
| | 19) UserComment =
| | 20) FlashpixVersion = 0100
| | 21) ColorSpace = 1
| | 22) ExifImageWidth = 6000
| | 23) ExifImageHeight = 4000
| | 24) InteropOffset (SubDirectory) -->
| | + [InteropIFD directory with 2 entries]
| | | 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) Contrast = 0
| | 34) Saturation = 0
| | 35) Sharpness = 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 (SubDirectory) -->
| + [PrintIM directory with 3 entries]
| | PrintIMVersion = 0300
| | 0) PrintIM_0x0002 = 1
| | 1) PrintIM_0x0003 = 34
| | 2) PrintIM_0x0101 = 0
+ [IFD1 directory with 13 entries]
| 0) Compression = 6
| 1) ImageDescription =
| 2) Make = SONY
| 3) Model = ILCE-6000
| 4) Orientation = 1
| 5) XResolution = 72 (72/1)
| 6) YResolution = 72 (72/1)
| 7) ResolutionUnit = 2
| 8) Software = ILCE-6000 v3.20
| 9) ModifyDate = 2018:05:11 08:35:11
| 10) ThumbnailOffset = 38476
| 11) ThumbnailLength = 6426
| 12) YCbCrPositioning = 2
JPEG APP1 (2825 bytes):
+ [XMP directory, 2796 bytes]
| XMPToolkit = XMP Core 4.4.0-Exiv2
| Software = digiKam-5.6.0
| CreatorTool = digiKam-5.6.0
| Caption = Grand Canyon-Parashant National Monument, along the Clayhole Road
| Title = Grand Canyon-Parashant National Monument, along the Clayhole Road
JPEG APP13 (126 bytes):
+ [Photoshop directory, 112 bytes]
| IPTCData (SubDirectory) -->
| + [IPTC directory, 99 bytes]
| | CurrentIPTCDigest = ~.g..z....3P}R..
| | -- IPTCEnvelope record --
| | CodedCharacterSet = .%G
| | -- IPTCApplication record --
| | OriginatingProgram = digiKam
| | ProgramVersion = 5.6.0
| | ObjectName = Grand Canyon-Parashant National Monument, along the Clayhole Roa
JPEG APP2 (156 bytes):
+ [MPF0 directory with 3 entries]
| 0) MPFVersion = 0100
| 1) NumberOfImages = 2
| 2) MPImageList (SubDirectory) -->
| + [BinaryData directory, 16 bytes]
| | MPImageFlags = 2684354560
| | MPImageFormat = 0
| | MPImageType = 196608
| | MPImageLength = 8768466
| | MPImageStart = 0
| | DependentImage1EntryNumber = 2
| | DependentImage2EntryNumber = 0
| + [BinaryData directory, 16 bytes]
| | MPImageFlags = 1073741824
| | MPImageFormat = 0
| | MPImageType = 65538
| | MPImageLength = 664145
| | MPImageStart = 8724632
| | DependentImage1EntryNumber = 0
| | DependentImage2EntryNumber = 0
JPEG DQT (130 bytes):
JPEG DHT (416 bytes):
JPEG SOF0 (15 bytes):
ImageWidth = 6000
ImageHeight = 4000
EncodingProcess = 0
BitsPerSample = 8
ColorComponents = 3
JPEG SOS
Warning = [minor] Error reading PreviewImage
PreviewImage = SCALAR(0x19b5ab8)
Какие существуют инструменты для автоматического удаления пыли с сенсора с большой серии фотографий? У меня есть сотни пострадавших фотографий (в основном все, что сделано в F / 8 или меньше). Это наиболее очевидно, когда область поражения находится в небе, поэтому решение, которое работает только для неба, является удовлетворительным. Предполагая, что пыль не перемещается слишком далеко , должна быть возможность использовать какую-то методику сопоставления для вычисления новой маски для каждой фотографии, прежде чем применять ее с помощью рисования или каким-либо другим методом. Хотя это просто в теории, реализация этого может быть довольно трудоемкой на практике - и я даже не уверен, является ли рисование хорошим решением.
Если не считать ручного восстановления каждой фотографии (на моем старом рабочем столе требуется только 4 минуты времени расчета), какие существуют инструменты для восстановления всей серии моих фотографий (или, по крайней мере, тех, которые были сделаны на F / 8 или меньше с небом в пострадавшие районы)?
Я работаю в Linux, и мой обычный инструментарий состоит из digikam, darktable, gimp и Python. Камера представляет собой довольно новую Sony A6000 (беззеркальная / компактная системная камера). Некоторые фотографии сделаны с помощью объектива Sony OSS 18–200 мм, другие - с ручным объективом Samyang 12 мм.