如何在Matlab中将元数据附加到图像?

zac*_*618 9 matlab metadata image image-processing

在Matlab中编写一些图像处理程序时,我发现我不知道如何将元数据写入新处理和保存的图像中.为了简单起见,我的流程如下:

image = imread('Base_Pic.jpg');  
image_info = imfinfo('Base_Pic.jpg');
%Process image...
%Update metadata...
imwrite(image,'Updated_Image.jpg','JPEG','Quality',100);
Run Code Online (Sandbox Code Playgroud)

我基本上希望新处理的图像具有与原始图像相同的元数据属性,当然还会更新一些字段.

如何将image_info 结构附加到新保存的JPEG

mat*_*fee 6

你必须要做到这一点(非常)有限的能力imwrite:支持JPEG它只接受BitDepth,Comment,ModeQuality.而ModeQuality没有得到来自返回iminfo.在imwrite你可以做:

iminfo = imfinfo('Base_Pic.jpg')
imwrite(...,'BitDepth',iminfo.BitDepth, 'Comment',iminfo.Comment);
Run Code Online (Sandbox Code Playgroud)

除此之外,据我所知,目前还没有办法用Image Processing Toolbox/Matlab做到这一点.如果你有TIFF或医学图像,有很多工具箱可以做到这一点,但我还没有找到任何jpeg,即使在文件交换...

如果您使用的exiftool是系统,则可以使用

[status info]=system('exiftool -s Base_Pic.jpg');
Run Code Online (Sandbox Code Playgroud)

info 现在包含标签名称和标签值的列表,例如:

ExifToolVersion                 : 8.75
FileName                        : Base_Pic.jpg
Directory                       : Pictures
FileSize                        : 2.0 MB
FileModifyDate                  : 2011:10:27 08:41:55+10:00
FilePermissions                 : rw-rw-r--
FileType                        : JPEG
MIMEType                        : image/jpeg
JFIFVersion                     : 1.01
ExifByteOrder                   : Big-endian (Motorola, MM)
Make                            : Apple
Model                           : iPhone 4
...
Run Code Online (Sandbox Code Playgroud)

如果你在冒号上分开,:你可以用它们写回来exiftool -[TAG]=[VALUE],例如exiftool -Make=Apple -Model="iPhone 4" ....

或者你可以在一次犯规中将它们"全部"复制出来:

system('exiftool -overwrite_original -tagsFromFile Base_Pic.jpg Updated_Image.jpg')
Run Code Online (Sandbox Code Playgroud)