Lossless compression in Motion JPEG 2000 (.mj2) file. How do I tell?

9 次查看(过去 30 天)
I found that Matlab's VideoWriter has the capability to write a Motion JPEG 2000 file with the LosslessCompression flag. Is there a way to find out whether images in a Motion JPEG 2000 file has been compressed losslessly?

回答(1 个)

Janosch Kunczik
Janosch Kunczik 2017-6-13
Hello Spencer,
Yes there is a way:
  1. Take an (raw) image sequence or video file and use the VideoWriter to create a .mj2 video.
  2. Use the VideoReader to read the video frame by frame
  3. Compare both
%%Write the video
writer = VideoWriter('test.mj2','Motion JPEG 2000');
writer.LosslessCompression = true;
for i=1:length(testData)
writeVideo(writer,testData(:,:,:,i));
end
close(writer);
vidObj = VideoReader('test.mj2');
for i=1:length(testData)
frame = readFrame(vidObj);
orig_frame = rawObj.Data(i).frame;
error = frame - orig_frame;
disp(max(max(abs(error)));
end
This little snippet will let you prove that the result isn't lossless, although the LosslessCompression flag has been set.
I you want to have a lossless Motion JPEG 200 video, you will have to use the 'Archival' profile.
writer = VideoWriter('test.mj2','Archival');
Kind regards,
Josh

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by