Matlab 如何读取八度图像的ISO速度?

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

在MATLAB中,我曾经:

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+上),这样我就可以试着看看我这边是否有什么问题了?