2012-01-29 30 views
9

Khi viết một số quy trình xử lý hình ảnh trong Matlab, tôi thấy rằng tôi không biết cách ghi siêu dữ liệu vào hình ảnh mới được xử lý và lưu. Để đơn giản, luồng của tôi như sau:Làm cách nào để thêm siêu dữ liệu vào hình ảnh trong Matlab?

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

Tôi về cơ bản muốn hình ảnh mới được xử lý có tất cả các thuộc tính siêu dữ liệu giống như hình gốc, với một vài trường được cập nhật tất nhiên.

Làm cách nào để nối cấu trúc image_info vào JPEG mới được lưu?

Trả lời

6

Bạn có một (rất) khả năng hạn chế để làm điều này trong imwrite: cho JPEG nó chỉ chấp nhận BitDepth, Comment, ModeQuality. Và ModeQuality không được trả lại từ iminfo. Trong imwrite bạn có thể làm:

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

Khác hơn thế, đó không phải là một cách để làm điều này với Image Processing Toolbox/Matlab như xa như tôi biết. Nếu bạn có TIFF hoặc hình ảnh y tế có một số hộp công cụ làm điều đó, nhưng tôi chưa bao giờ tìm thấy bất kỳ jpeg nào, ngay cả trên File Exchange ...

Nếu bạn có exiftool trên hệ thống, bạn có thể sử dụng

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

info bây giờ chứa một danh sách các tên thẻ và giá trị thẻ, ví dụ:

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

và nếu bạn chia trên ruột : bạn có thể viết chúng trở lại sử dụng exiftool -[TAG]=[VALUE], ví dụ: exiftool -Make=Apple -Model="iPhone 4" ....

Hoặc bạn có thể sao chép chúng "tất cả" trong một hit hôi:

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

Nếu bạn không thay đổi quá nhiều trong những lĩnh vực mà bạn có thể tận dụng exiftool, mà là một thực thi mà có thể đọc và viết các thẻ exif.

tôi có lẽ muốn làm điều gì đó như:

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 
... 
Các vấn đề liên quan