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

22 ビュー (過去 30 日間)
Spencer Chen
Spencer Chen 2016 年 8 月 9 日
回答済み: Janosch Kunczik 2017 年 6 月 13 日
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

カテゴリ

Help Center および File ExchangeImport, Export, and Conversion についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by