2012-01-29 80 views
9

在Matlab中编写一些图像处理例程时,我发现我不知道如何将元数据写入新处理和保存的图像。为了保持它的简单,我的流程如下:如何将元数据添加到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

回答

6

你必须imwrite做到这一点(非常)有限的能力:以JPEG它只接受BitDepthCommentModeQuality。并且ModeQuality不会从iminfo返回。 在imwrite,你可以这样做:

iminfo = imfinfo('Base_Pic.jpg') 
imwrite(...,'BitDepth',iminfo.BitDepth, 'Comment',iminfo.Comment); 

除此之外,没有一种方式,据我所知有图像处理工具箱/ 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

如果不修改太多,你可以利用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 
...