2012-01-29 18 views
9

Al escribir algunas rutinas de procesamiento de imágenes en Matlab, descubrí que no sé cómo escribir metadatos en una imagen recién procesada y guardada. Para hacerlo simple, mi flujo es el siguiente:¿Cómo añado metadatos a una imagen en Matlab?

image = imread('Base_Pic.jpg'); 
image_info = imfinfo('Base_Pic.jpg'); 
%Process image... 
%Update metadata... 
imwrite(image,'Updated_Image.jpg','JPEG','Quality',100); 

básicamente quiero la imagen recién procesada para tener todos los atributos de los mismos metadatos que la imagen original, con unos campos actualizados por supuesto.

¿Cómo puedo agregar la estructura image_info al JPEG recién guardado?

Respuesta

6

Usted tiene un (muy) limitada capacidad de hacer esto en imwrite: para JPEG sólo acepta BitDepth, Comment, Mode y Quality. Y Mode y Quality no se devuelven desde iminfo. En imwrite que puede hacer:

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

Aparte de eso, no hay una manera de hacer esto con la imagen Processing Toolbox/Matlab por lo que yo sé. Si tiene TIFF o imágenes médicas, hay varias cajas de herramientas que lo hacen, pero nunca he encontrado ninguna para jpeg, incluso en el Intercambio de archivos ...

Si tiene exiftool en su sistema, puede utilizar

[status info]=system('exiftool -s Base_Pic.jpg'); 

info ahora contiene una lista de los nombres de las etiquetas y los valores de las variables, por ejemplo:

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 
... 

y si se divide en dos puntos : se puede escribir de nuevo utilizando exiftool -[TAG]=[VALUE], por ejemplo, exiftool -Make=Apple -Model="iPhone 4" ....

O puede copiarlos "todos" en una falta de éxito:

system('exiftool -overwrite_original -tagsFromFile Base_Pic.jpg Updated_Image.jpg') 
1

Si no está modificando muchos de los campos que usted podría hacer uso de exiftool, que es un archivo ejecutable que puede leer y escribir etiquetas exif

probablemente haría algo como:

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 
... 
Cuestiones relacionadas