Matlab 如何读取八度图像的ISO速度?
在MATLAB中,我曾经:Matlab 如何读取八度图像的ISO速度?,matlab,metadata,octave,exif,Matlab,Metadata,Octave,Exif,在MATLAB中,我曾经: info = imfinfo('image.jpg'); iso = info.DigitalCamera.ISOSpeedRatings; 就这样。Octave有一个imfinfo函数,可以从图像头读取许多参数,但显然不是ISO速度。这对我来说很奇怪(为什么它会读取几十个参数并释放ISO速度?) 我有什么遗漏吗 示例图像是使用DSLR拍摄的(正如您在imfinfo中看到的)。通过MATLAB,我可以清楚地看到imfinfo('image.jpg')、Digita
info = imfinfo('image.jpg');
iso = info.DigitalCamera.ISOSpeedRatings;
就这样。Octave有一个imfinfo
函数,可以从图像头读取许多参数,但显然不是ISO速度。这对我来说很奇怪(为什么它会读取几十个参数并释放ISO速度?)
我有什么遗漏吗
示例图像是使用DSLR拍摄的(正如您在imfinfo中看到的)。通过MATLAB,我可以清楚地看到imfinfo('image.jpg')、DigitalCamera.ISOSpeedRatings
是200
tl;博士
所需的值位于字段摄影灵敏度
下。使用:
iso = imfinfo ("image.jpg").DigitalCamera.PhotographicSensitivity;
看。
Octave只考虑遵循Exif版本2.3的标记
变通办法
旧版本的倍频程图像包有一个函数readexif
(该函数在图像包版本2.2.0中被弃用,在版本2.4.0中被删除),该函数可能能够读取它们。包含该函数的最后一个版本是
讨论
您正在访问的详细信息是图像文件上的值。基本上,您的文件中有一个表,将标签(如ExposureTime
或FNumber
)映射到它们的实际值。但是,文件中没有对标记名进行编码。相反,每个标记都有一个整数值,例如,ExposureTime
或FNumber
将分别显示为33437和33434。程序/库的工作是将这些整数值映射到标记名
您正在查找的标记,ISOSpeedRatings
不是有效的EXIF标记(最新规范,2010年发布)。它被重命名为摄影敏感性
。如果您阅读该标签下的规格,您将发现以下注释:
请注意,在本标准2.21版之前的版本中,此标签被称为“ISOSpeedRatings”
如果您阅读更多规范,您将在附录G中找到以下说明:
[…]ID为34855的感光度标签先前被称为“等速”,这实际上导致了对感光度的混淆解释,导致许多记录与ISO 12232标准下定义的ISO速度不同
如果您阅读了更多的规范,您会注意到带有标记34855的值的含义在其名称更改时略有改变。这意味着这不仅仅是一个标签名问题,如果您的相机遵循不同版本的EXIF规范,其含义也会有所不同(假设您的相机记录正确,请记住更改的原因是相机记录了错误的内容)
我不确定什么是正确的技术答案。我猜程序应该检查记录的ExifVersion(即EXIF标记36864),并根据它更改标记名
编辑
Octave使用GraphicsMagck读取图像,包括其元数据。GraphicsMagick不接受EXIF标记号,程序需要使用标记名进行查询。Octave有一个标签名称的硬编码列表,但只包括Exif specs 2.3的标签。GraphicsMagick似乎识别出您的文件是旧版本的Exif,并以Octave不要求的方式命名标签。我做了以下操作,现在可以使用图2.6.1中2.2.2中的readexif:
- 按照本线程前面的建议下载图像2.2.2
- 在图2.6.1中添加来自图2.2.2的readexif.m
- 重新加载包
pkg加载图像
- 现在您可以调用readexif。要获得等速率:
readexif(JPGPath).Exif\u IFD\u Pointer.ISOSpeedRatings
您运行的八度音阶版本是什么?Octave的imfinfo
确实返回一个带有EXIF标记的DigitalCamera
字段。@carandraug是的,但没有ISOSpeedRatings子项。至少我看到了这一点。4.0.1您能提供一个示例图像吗?@m_vai我已将此作为一个示例报告。你能把有问题的图片上传到那里吗?谢谢。在我的例子中,我可以在MATLAB上用等速阅读它,但在倍频程上我找不到任何感光字段。如果我理解正确,我应该在这两种情况下都能找到一些东西,因为标记id是相同的。我已经发布了一个链接,指向我编辑的问题中的一个有问题的图像。@mvai不太清楚。Octave然后调用GraphicsMagick,GraphicsMagick调用另一个库(不确定哪个库)来读取exif标记。如果你能在bug追踪器上回复,那就太好了。好吧,我错过了你第一次评论中的最后一个“there”。事实上,我无法用我尝试过的任何图像读取ISO速度。你能给我看一张和你一起工作的图片吗(可能在八度4+上),这样我就可以试着看看我这边是否有什么问题了?