Как добавить метаданные к изображению в Matlab? - PullRequest
9 голосов
/ 29 января 2012

При написании некоторых подпрограмм обработки изображений в 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?

Ответы [ 3 ]

6 голосов
/ 30 января 2012

У вас есть (очень) ограниченные возможности сделать это в 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')
2 голосов
/ 08 июня 2013

Прочитайте это: http://www.mathworks.co.uk/help/matlab/import_export/exporting-to-images.html#br_c_iz-1

под заголовком: «Экспорт данных изображения и метаданных в файлы TIFF» ...

1 голос
/ 30 января 2012

Если вы не изменяете слишком много полей, вы можете использовать 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
...
...