2012-01-29 11 views
9

Pisząc niektóre procedury przetwarzania obrazów w programie Matlab, odkryłem, że nie wiem, jak zapisać metadane na nowo przetworzonym i zapisanym obrazie. Keep it simple, mój przepływu jest w następujący sposób:Jak dołączyć metadane do obrazu w programie Matlab?

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

Chcę zasadniczo nowo przetwarzany obraz mieć wszystkie takie same atrybuty metadanych jako oryginalnego obrazu, z kilkoma polami uaktualnionych oczywiście.

Jak mogę dołączyć strukturę image_info do nowo zapisanego JPEG?

Odpowiedz

6

masz (bardzo) ograniczone możliwości zrobienia tego w imwrite: JPEG to akceptuje tylko BitDepth, Comment, Mode i Quality. I Mode i Quality nie zostaną zwrócone z iminfo. W imwrite można zrobić:

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

Poza tym, nie ma sposobu, aby to zrobić z Image Processing Toolbox/Matlab o ile wiem. Jeśli masz obrazy TIFF lub medyczne, istnieje wiele skrzynek narzędziowych, które to robią, ale ja nigdy nie znalazłem żadnego dla jpeg, nawet na giełdzie plików ...

Jeśli masz w swoim systemie exiftool, możesz używać

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

info teraz zawiera listę nazw znaczników i wartości znaczników, np:

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

a jeśli podzielić na okrężnicy : można zapisać je z powrotem za pomocą exiftool -[TAG]=[VALUE], np exiftool -Make=Apple -Model="iPhone 4" ....

Albo można je skopiować „wszystko” w jednym faul obrażeń:

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

Jeśli nie modyfikując zbyt wiele pól mogła skorzystać z exiftool, który jest wykonywalny, który potrafi czytać i napisz tagi exif.

I pewnie zrobić coś takiego:

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 
... 
Powiązane problemy