在Matlab中编写一些图像处理程序时,我发现我不知道如何将元数据写入新处理和保存的图像中。为了简单起见,我的流程如下:
image = imread('Base_Pic.jpg');
image_info = imfinfo('Base_Pic.jpg');
%Process image...
%Update metadata...
imwrite(image,'Updated_Image.jpg','JPEG','Quality',100);
我基本上希望新处理的图像具有与原始图像相同的元数据属性,当然还会更新一些字段。
如何将image_info
结构附加到新保存的JPEG
?
答案 0 :(得分:6)
您在imwrite
中执行此操作的能力非常有限:对于JPEG,它只接受BitDepth
,Comment
,Mode
和Quality
。并且Mode
和Quality
不会从iminfo
返回。
在imwrite
,你可以这样做:
iminfo = imfinfo('Base_Pic.jpg')
imwrite(...,'BitDepth',iminfo.BitDepth, 'Comment',iminfo.Comment);
除此之外,据我所知,目前还没有办法用Image Processing Toolbox / Matlab做到这一点。如果您有TIFF或医学图像,有许多工具箱可以做到这一点,但我还没有找到任何jpeg,即使在文件交换...
如果您的系统上有exiftool
,则可以使用
[status info]=system('exiftool -s Base_Pic.jpg');
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
...
如果您在冒号:
上拆分,则可以使用exiftool -[TAG]=[VALUE]
将其写回来,例如exiftool -Make=Apple -Model="iPhone 4" ...
。
或者你可以在一次犯规中复制“全部”:
system('exiftool -overwrite_original -tagsFromFile Base_Pic.jpg Updated_Image.jpg')
答案 1 :(得分:2)
阅读本文: http://www.mathworks.co.uk/help/matlab/import_export/exporting-to-images.html#br_c_iz-1
标题下:“将图像数据和元数据导出到TIFF文件”......
答案 2 :(得分:1)
如果您没有修改太多字段,可以使用exiftool,这是一个可以读取和写入exif标记的可执行文件。
我可能会做类似的事情:
image = imread('src.jpg');
image_info = imfinfo('src.jpg');
%Process image...
%Update metadata...
imwrite(image,'dst.jpg','JPEG','Quality',100);
% copy over all the tags
system('exiftool -tagsfromfile src.jpg dst.jpg');
% then use exif tool to update the specific tags
...