图像中的Exif信息及其处理

1.Exif

可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),是专门为数码相机的照片设定的文件格式,可以记录数码照片的属性信息和拍摄数据。EXIF可以附加于JPEG、TIFF、RIFF等文件之中,为其增加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本信息[1]。

xif标准最初由日本电子工业发展协会(JEIDA - Japan Electronic Industry Development Association)制订,目前的最新版本是发布于2010年04月的 Exif 2.3 版,该版本曾在2012年12月以及2013年5月有所修正 ,并已经应用到各个厂商的新影像设备中。2

Exif 文件实际是JPEG文件的一种,遵从JPEG标准,只是在文件头信息中增加了有关拍摄信息的内容和索引图。所以你可以使用任何支持JPEG格式的图像工具软件观看 Exif 文件,但图像一旦被修改,Exif 信息可能会永久丢失,故编辑 Exif 必须使用专门的软件。所有的JPEG图像以字符串“0xFFD8”开头,并以字符串“0xFFD9”结束。0xFFE0 – 0xFFEF之间的标识符称为“应用标记”,没有被常规JPEG文件利用,Exif正是利用这些信息串记录拍摄信息如快门速度、光圈值等,甚至可以包括全球定位信息。3

图像中的Exif信息及其处理_第1张图片

标签号 Exif 定义名 中文定义名 备注
0x010E ImageDescription 图像描述
0x013B Artist 作者
0x010F Make 生产商
0x0110 Model 型号 相机型号
0x0112 Orientation 方向
0x011A XResolution 水平方向分辨率
0x011B YResolution 垂直方向分辨率
0x0128 ResolutionUnit 分辨率单位
0x0131 Software 软件 固件Firmware版本或者编辑软件
0x0132 DateTime 日期和时间 照片最后修改时间
0x0213 YCbCrPositioning YCbCr定位
0x8769 ExifOffset Exif子IFD偏移量
0x829A ExposureTime 曝光时间 快门速度
0x829D FNumber 光圈系数 光圈的F值
0x8822 ExposureProgram 曝光程序 自动曝光、光圈优先、快门优先、M档等
0x8827 ISOSpeedRatings ISO感光度
0x9000 ExifVersion Exif 版本
0x9003 DateTimeOriginal 拍摄时间 照片拍摄时间
0x9004 DateTimeDigitized 数字化时间 照片被写入时间
0x9204 ExposureBiasValue 曝光补偿
0x9205 MaxApertureValue 最大光圈
0x9207 MeteringMode 测光模式 平均测光、中央重点测光、点测光
0x9208 Lightsource 光源 一般记录白平衡
0x9209 Flash 闪光灯 闪光灯状态
0x920A FocalLength 镜头焦距 镜头物理焦距
0x927C MakerNote 厂商注释
0x9286 UserComment 用户注释
0xA000 FlashPixVersion FlashPix版本
ColorSpace 色彩空间 AdobeRGB、sRGB等
ExifImageWidth 图像宽度
0xA003 ExifImageLength 图像高度
0xA433 LensMake 镜头生产商
0xA434 LensModel 镜头型号

通过以上可知,Exif信息是可以修改的,包含部分隐私数据,发送原图时很有可能会附带Exif信息。

2.对计算机视觉模型的影响

在使用手机或相机拍照时,有时候会横握设备有时候又竖握设备,手持方向发生变化,设备内部的重力感应器件会告诉设备,照片究竟哪个边是向上的。然而,实际图像的像素数据不会旋转,因为图像传感器是对连续的像素信息流进行逐行读取的,因此无论纵向和横向握持相机,图像都是按照一个方向进行存储,拍照设备和电脑之所以能够按照正确的方向显示图片,正是因为照片中保存的Exif信息。下图参考自4

图像中的Exif信息及其处理_第2张图片

图片阅读器之所以能够将横向排列的图像数据显示为正常图像,是因为根据Exif中的orientation参数对展示图像进行了处理,如果图片处理程序不处理Exif信息,那么图像将横向展示如下图:
图像中的Exif信息及其处理_第3张图片

一些图像处理程序不会去解析Exif信息,如NumPy、SciPy,TensorFlow,Keras等,当使用这些工具导入图像时,都将获得原始的未旋转图像数据,如横竖上下颠倒等,将如此数据输入视觉模型中时,会影响模型的分类检测分割效果

PIL库中,Exif的编码可通过如下方式获取

from PIL.ExifTags import TAGS
print(TAGS)
{
	11: 'ProcessingSoftware',
	254: 'NewSubfileType',
	255: 'SubfileType',
	256: 'ImageWidth',
	257: 'ImageLength',
	258: 'BitsPerSample',
	259: 'Compression',
	262: 'PhotometricInterpretation',
	263: 'Thresholding',
	264: 'CellWidth',
	265: 'CellLength',
	266: 'FillOrder',
	269: 'DocumentName',
	270: 'ImageDescription',
	271: 'Make',
	272: 'Model',
	273: 'StripOffsets',
	274: 'Orientation',
	277: 'SamplesPerPixel',
	278: 'RowsPerStrip',
	279: 'StripByteCounts',
	280: 'MinSampleValue',
	281: 'MaxSampleValue',
	282: 'XResolution',
	283: 'YResolution',
	284: 'PlanarConfiguration',
	285: 'PageName',
	288: 'FreeOffsets',
	289: 'FreeByteCounts',
	290: 'GrayResponseUnit',
	291: 'GrayResponseCurve',
	292: 'T4Options',
	293: 'T6Options',
	296: 'ResolutionUnit',
	297: 'PageNumber',
	301: 'TransferFunction',
	305: 'Software',
	306: 'DateTime',
	315: 'Artist',
	316: 'HostComputer',
	317: 'Predictor',
	318: 'WhitePoint',
	319: 'PrimaryChromaticities',
	320: 'ColorMap',
	321: 'HalftoneHints',
	322: 'TileWidth',
	323: 'TileLength',
	324: 'TileOffsets',
	325: 'TileByteCounts',
	330: 'SubIFDs',
	332: 'InkSet',
	333: 'InkNames',
	334: 'NumberOfInks',
	336: 'DotRange',
	337: 'TargetPrinter',
	338: 'ExtraSamples',
	339: 'SampleFormat',
	340: 'SMinSampleValue',
	341: 'SMaxSampleValue',
	342: 'TransferRange',
	343: 'ClipPath',
	344: 'XClipPathUnits',
	345: 'YClipPathUnits',
	346: 'Indexed',
	347: 'JPEGTables',
	351: 'OPIProxy',
	512: 'JPEGProc',
	513: 'JpegIFOffset',
	514: 'JpegIFByteCount',
	515: 'JpegRestartInterval',
	517: 'JpegLosslessPredictors',
	518: 'JpegPointTransforms',
	519: 'JpegQTables',
	520: 'JpegDCTables',
	521: 'JpegACTables',
	529: 'YCbCrCoefficients',
	530: 'YCbCrSubSampling',
	531: 'YCbCrPositioning',
	532: 'ReferenceBlackWhite',
	700: 'XMLPacket',
	4096: 'RelatedImageFileFormat',
	4097: 'RelatedImageWidth',
	4098: 'RelatedImageLength',
	18246: 'Rating',
	18249: 'RatingPercent',
	32781: 'ImageID',
	33421: 'CFARepeatPatternDim',
	33422: 'CFAPattern',
	33423: 'BatteryLevel',
	33432: 'Copyright',
	33434: 'ExposureTime',
	33437: 'FNumber',
	33723: 'IPTCNAA',
	34377: 'ImageResources',
	34665: 'ExifOffset',
	34675: 'InterColorProfile',
	34850: 'ExposureProgram',
	34852: 'SpectralSensitivity',
	34853: 'GPSInfo',
	34855: 'ISOSpeedRatings',
	34856: 'OECF',
	34857: 'Interlace',
	34858: 'TimeZoneOffset',
	34859: 'SelfTimerMode',
	36864: 'ExifVersion',
	36867: 'DateTimeOriginal',
	36868: 'DateTimeDigitized',
	37121: 'ComponentsConfiguration',
	37122: 'CompressedBitsPerPixel',
	37377: 'ShutterSpeedValue',
	37378: 'ApertureValue',
	37379: 'BrightnessValue',
	37380: 'ExposureBiasValue',
	37381: 'MaxApertureValue',
	37382: 'SubjectDistance',
	37383: 'MeteringMode',
	37384: 'LightSource',
	37385: 'Flash',
	37386: 'FocalLength',
	37387: 'FlashEnergy',
	37388: 'SpatialFrequencyResponse',
	37389: 'Noise',
	37393: 'ImageNumber',
	37394: 'SecurityClassification',
	37395: 'ImageHistory',
	37396: 'SubjectLocation',
	37397: 'ExposureIndex',
	37398: 'TIFF/EPStandardID',
	37500: 'MakerNote',
	37510: 'UserComment',
	37520: 'SubsecTime',
	37521: 'SubsecTimeOriginal',
	37522: 'SubsecTimeDigitized',
	37888: 'AmbientTemperature',
	37889: 'Humidity',
	37890: 'Pressure',
	37891: 'WaterDepth',
	37892: 'Acceleration',
	37893: 'CameraElevationAngle',
	40091: 'XPTitle',
	40092: 'XPComment',
	40093: 'XPAuthor',
	40094: 'XPKeywords',
	40095: 'XPSubject',
	40960: 'FlashPixVersion',
	40961: 'ColorSpace',
	40962: 'ExifImageWidth',
	40963: 'ExifImageHeight',
	40964: 'RelatedSoundFile',
	40965: 'ExifInteroperabilityOffset',
	41483: 'FlashEnergy',
	41484: 'SpatialFrequencyResponse',
	41486: 'FocalPlaneXResolution',
	41487: 'FocalPlaneYResolution',
	41488: 'FocalPlaneResolutionUnit',
	41492: 'SubjectLocation',
	41493: 'ExposureIndex',
	41495: 'SensingMethod',
	41728: 'FileSource',
	41729: 'SceneType',
	41730: 'CFAPattern',
	41985: 'CustomRendered',
	41986: 'ExposureMode',
	41987: 'WhiteBalance',
	41988: 'DigitalZoomRatio',
	41989: 'FocalLengthIn35mmFilm',
	41990: 'SceneCaptureType',
	41991: 'GainControl',
	41992: 'Contrast',
	41993: 'Saturation',
	41994: 'Sharpness',
	41995: 'DeviceSettingDescription',
	41996: 'SubjectDistanceRange',
	42016: 'ImageUniqueID',
	42032: 'CameraOwnerName',
	42033: 'BodySerialNumber',
	42034: 'LensSpecification',
	42035: 'LensMake',
	42036: 'LensModel',
	42037: 'LensSerialNumber',
	42240: 'Gamma',
	50341: 'PrintImageMatching',
	50706: 'DNGVersion',
	50707: 'DNGBackwardVersion',
	50708: 'UniqueCameraModel',
	50709: 'LocalizedCameraModel',
	50710: 'CFAPlaneColor',
	50711: 'CFALayout',
	50712: 'LinearizationTable',
	50713: 'BlackLevelRepeatDim',
	50714: 'BlackLevel',
	50715: 'BlackLevelDeltaH',
	50716: 'BlackLevelDeltaV',
	50717: 'WhiteLevel',
	50718: 'DefaultScale',
	50719: 'DefaultCropOrigin',
	50720: 'DefaultCropSize',
	50721: 'ColorMatrix1',
	50722: 'ColorMatrix2',
	50723: 'CameraCalibration1',
	50724: 'CameraCalibration2',
	50725: 'ReductionMatrix1',
	50726: 'ReductionMatrix2',
	50727: 'AnalogBalance',
	50728: 'AsShotNeutral',
	50729: 'AsShotWhiteXY',
	50730: 'BaselineExposure',
	50731: 'BaselineNoise',
	50732: 'BaselineSharpness',
	50733: 'BayerGreenSplit',
	50734: 'LinearResponseLimit',
	50735: 'CameraSerialNumber',
	50736: 'LensInfo',
	50737: 'ChromaBlurRadius',
	50738: 'AntiAliasStrength',
	50739: 'ShadowScale',
	50740: 'DNGPrivateData',
	50741: 'MakerNoteSafety',
	50778: 'CalibrationIlluminant1',
	50779: 'CalibrationIlluminant2',
	50780: 'BestQualityScale',
	50781: 'RawDataUniqueID',
	50827: 'OriginalRawFileName',
	50828: 'OriginalRawFileData',
	50829: 'ActiveArea',
	50830: 'MaskedAreas',
	50831: 'AsShotICCProfile',
	50832: 'AsShotPreProfileMatrix',
	50833: 'CurrentICCProfile',
	50834: 'CurrentPreProfileMatrix',
	50879: 'ColorimetricReference',
	50931: 'CameraCalibrationSignature',
	50932: 'ProfileCalibrationSignature',
	50934: 'AsShotProfileName',
	50935: 'NoiseReductionApplied',
	50936: 'ProfileName',
	50937: 'ProfileHueSatMapDims',
	50938: 'ProfileHueSatMapData1',
	50939: 'ProfileHueSatMapData2',
	50940: 'ProfileToneCurve',
	50941: 'ProfileEmbedPolicy',
	50942: 'ProfileCopyright',
	50964: 'ForwardMatrix1',
	50965: 'ForwardMatrix2',
	50966: 'PreviewApplicationName',
	50967: 'PreviewApplicationVersion',
	50968: 'PreviewSettingsName',
	50969: 'PreviewSettingsDigest',
	50970: 'PreviewColorSpace',
	50971: 'PreviewDateTime',
	50972: 'RawImageDigest',
	50973: 'OriginalRawFileDigest',
	50974: 'SubTileBlockSize',
	50975: 'RowInterleaveFactor',
	50981: 'ProfileLookTableDims',
	50982: 'ProfileLookTableData',
	51008: 'OpcodeList1',
	51009: 'OpcodeList2',
	51022: 'OpcodeList3',
	51041: 'NoiseProfile'
}

使用PIL库时,一幅图像数据Exif信息的获取可通过getexif方法获得。

from PIL import Image
img = Image.open("./m.jpg")
print(img.getexif())
{
	34665: 290,
	36864: b '0210',
	37121: b '\x01\x02\x03\x00',
	37377: 29.8973,
	36867: '2020:09:02 23:02:43',
	36868: '2020:09:02 23:02:43',
	37378: 2.52,
	37379: 0.0,
	37380: 0.0,
	37383: 5,
	37384: 1,
	37385: 24,
	37386: 3.38,
	40961: 1,
	40962: 2448,
	40965: 8434,
	41990: 0,
	37520: '438870',
	37521: '438870',
	37522: '438870',
	40963: 3264,
	41996: 0,
	41495: 2,
	41728: b '\x03',
	33434: 0.04,
	33437: 2.4,
	41729: b '\x01',
	34850: 2,
	41985: 1,
	34855: 250,
	41986: 0,
	40960: b '0100',
	41987: 0,
	41988: 1.0,
	41989: 26,
	41991: 0,
	41992: 0,
	41993: 0,
	41994: 0,
	37500: b 'Auto\x00',
	296: 2,
	282: 72.0,
	256: 2448,
	257: 3264,
	258: (8, 8, 8),
	34853: {
		0: b '\x02\x02\x00\x00',
		1: 'N',
		2: (22.0, 38.0, 54.697723),
		3: 'E',
		4: (114.0, 3.0, 35.029907),
		5: b '\x01',
		6: 0.0,
		7: (15.0, 2.0, 42.0),
		27: 'CELLID',
		29: '2020:09:02'
	},
	41995: b 'ipp\x00',
	270: 'bty',
	271: 'HUAWEI',
	272: 'KNT-UL10',
	305: 'KNT-UL10 8.0.0.556(C00)',
	274: 0,
	306: '2020:09:02 23:02:43',
	531: 1,
	283: 72.0
}

譬如274表示orientation。其处理可参考5。

参考:
1.https://zh.wikipedia.org/wiki/Exif
2.https://zhuanlan.zhihu.com/p/366726838
3.https://baike.baidu.com/item/EXIF%E4%BF%A1%E6%81%AF/3297493
4.https://mp.weixin.qq.com/s?__biz=MzAxNTc4MTc1Ng==&mid=2649395978&idx=2&sn=9d19517b41e30069787c6998924fb850&chksm=83e0e919b497600fb7a630b0474f9b4a25866f997b6c4eca359c70cee8a6bf9aeead22a4f589&mpshare=1&scene=1&srcid=1008W3nbLinwcMZgf49emKar&sharer_sharetime=1633664055894&sharer_shareid=715337ab6f6483872d17f37de2f7e4bf¬replace=true&exportkey=A0i5QEYtCX3RYqAQLZ%2B%2FfNg%3D&pass_ticket=evQ%2BD4tN43xMZl5Nol%2BrBPpJxKHbPr9OuEQIL6mbg3eRRC%2F%2BbEwUDklPhQa8gB4M&wx_header=0#rd
5.https://github.com/ageitgey/image_to_numpy

你可能感兴趣的:(计算机视觉,图像处理,人工智能)