2012-01-29 4 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 она принимает только 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, даже в File Exchange ...

Если у вас есть 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 
... 
Смежные вопросы