Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在matlab中计算jpeg2000文件头大小?_Matlab_Image Processing_Header_Image Compression_Jpeg2000 - Fatal编程技术网

如何在matlab中计算jpeg2000文件头大小?

如何在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=

我想知道jpeg2000格式图像中标题的大小。我怎样才能找到这个标题

我想计算硬盘中image.jp2的纯大小,而不计算头的大小

我使用
iminfo
在matlab中查找一些关于图像的信息,但我不知道我能从中找到图像的标题大小吗

实际上,我用jpeg2000压缩了一幅图像,我想计算不带头大小的压缩率


请帮帮我

J2K文件有4个必需的顶级框。是的

  • JPEG 2000签名框
  • 文件类型框
  • JP2标题框
  • 连续码流盒
每个框前面都有4字节标记和4字节大小值。所以在MATLAB中应该是这样的

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。