如何在matlab中计算jpeg2000文件头大小?
我想知道jpeg2000格式图像中标题的大小。我怎样才能找到这个标题 我想计算硬盘中image.jp2的纯大小,而不计算头的大小 我使用如何在matlab中计算jpeg2000文件头大小?,matlab,image-processing,header,image-compression,jpeg2000,Matlab,Image Processing,Header,Image Compression,Jpeg2000,我想知道jpeg2000格式图像中标题的大小。我怎样才能找到这个标题 我想计算硬盘中image.jp2的纯大小,而不计算头的大小 我使用iminfo在matlab中查找一些关于图像的信息,但我不知道我能从中找到图像的标题大小吗 实际上,我用jpeg2000压缩了一幅图像,我想计算不带头大小的压缩率 请帮帮我 J2K文件有4个必需的顶级框。是的 JPEG 2000签名框 文件类型框 JP2标题框 连续码流盒 每个框前面都有4字节标记和4字节大小值。所以在MATLAB中应该是这样的 fname=
iminfo
在matlab中查找一些关于图像的信息,但我不知道我能从中找到图像的标题大小吗
实际上,我用jpeg2000压缩了一幅图像,我想计算不带头大小的压缩率
请帮帮我 J2K文件有4个必需的顶级框。是的
- JPEG 2000签名框
- 文件类型框
- JP2标题框
- 连续码流盒
fname='C:\Users\admin\Documents\MATLAB\SO\Jpeg2k\balloon.jp2';
fid = fopen(fname);
headerMark = uint8('jp2h');
matchCnt = 1;
ch = fread(fid,1,'*uint8');
matchCnt = matchCnt+isequal(headerMark(1),ch);
while matchCnt < 5 && ~feof(fid)
ch = fread(fid,1,'*uint8');
matchCnt = matchCnt+isequal(headerMark(matchCnt),ch);
end
if matchCnt == 5
fseek(fid,ftell(fid)-8,'bof');
sizeBytes = fread(fid,4,'*uint8');
sizeVal = arrayfun(@(x,y) bitshift(x,y,32), uint32(sizeBytes), [3:-1:0]');
sizeVal = bitor(bitor(bitor(sizeVal(1),sizeVal(2)),sizeVal(3)),sizeVal(4));
end
fclose(fid);
fname='C:\Users\admin\Documents\MATLAB\SO\jpe2k\balloon.jp2';
fid=fopen(fname);
headerMark=uint8('jp2h');
matchCnt=1;
ch=fread(fid,1,'*uint8');
matchCnt=matchCnt+isequal(headerMark(1),ch);
而匹配Cnt<5&&feof(fid)
ch=fread(fid,1,'*uint8');
matchCnt=matchCnt+isequal(headerMark(matchCnt),ch);
结束
如果matchCnt==5
fseek(fid,ftell(fid)-8,“bof”);
sizeBytes=fread(fid,4,'*uint8');
sizeVal=arrayfun(@(x,y)位移位(x,y,32),uint32(sizeBytes),[3:-1:0];
sizeVal=bitor(bitor(bitor)(sizeVal(1),sizeVal(2)),sizeVal(3)),sizeVal(4));
结束
fclose(fid);
我不知道您的最后一项任务是什么(获取页眉大小似乎有一半),但我建议查看JPEG2000的快速启动(用python编写)和验证器。提示:“请立即帮助我”可能会让您在此处得到较慢的响应,对那些自愿花时间帮助你的人说这是一个粗鲁的要求。我编辑了这个。谢谢JPEG2k头非常小,我怀疑它会对你的压缩比影响太大。在两个jpeg2k文件中,我都检查了它的12+20+345=377字节。你能解释一下怎么做吗?非常感谢。我在十六进制编辑器中打开了它,并计算了块大小。看见如果你需要一个十六进制编辑器,我喜欢HxD。