2012-01-29 65 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 
... 
相關問題