【问题标题】:Can two (or more) jpeg2000 be combined into one bigger one without decoding them to bitmap?可以将两个(或多个)jpeg2000 组合成一个更大的而不将它们解码为位图吗?
【发布时间】:2015-07-24 01:11:34
【问题描述】:

我有四个已知大小相同的 .j2k 文件(无损),我想将它们组合成一个更大的 .j2k 文件。当然,现在简单而有效的方法是将它们解压缩为位图并将较大的位图压缩为 .j2k 文件 - 但这是性能开销。有没有更简单的方法?如果是这样,你能用伪代码突出显示它吗?

更新

根据@malat 的建议,我尝试关注(see my github repo for full sources and image examples)

// for the simplicity I'm using same image to make 4 tiles 2x2
jpeg.header.Xsiz *= 2;
jpeg.header.Ysiz *= 2;
vector<j2k_tile_part> tiles = jpeg.tiles;

BOOST_FOREACH(j2k_tile_part& part, jpeg.tiles)
{
    part.Isot = 2;
}

for (int i = 0; i < 3; i++)
{
    BOOST_FOREACH(const j2k_tile_part& part, tiles)
    {
        j2k_tile_part clone(part);
        switch(i)
        {
        case 0:
            clone.Isot = 3;
            break;
        case 1:
            clone.Isot = 0;
            break;
        case 2:
            clone.Isot = 1;
            break;
        }
        jpeg.tiles.push_back(clone);
    }
}

jpeg.save_file(output_file);

哪个有效(就具有正确尺寸和填充图像数据的图像而言)。只有第一块瓷砖看起来还可以,但其他瓷砖就搞砸了。我虽然瓷砖是单独编码的 - 我错了吗?我还尝试将 COD 和 QCC 标记从主标题复制到磁贴标题 - 但这也没有帮助。

【问题讨论】:

  • 您最终需要提供更多详细信息:仅 JP2 Part-1 或 Part-2 可接受(例如:JPX 文件)?所有图块的大小都相同吗?

标签: c++ c image-processing jpeg2000


【解决方案1】:

我会这样做。只需向后启动即可。假设您的目标图像是 512x512,并且您的 4 个图块(J2K 输入)中的每一个都是 256x256。在这种情况下,让我们创建一个假的(但有效的)JP2 等效文件:

$ wget http://www.ece.rice.edu/~wakin/images/lena512color.tiff
$ kdu_compress -i lena512color.tif -o out.jp2 Stiles="{256,256}"  Clevels:T0C1=0  Cuse_sop:T3=yes  Cycc:T2=no

不要太担心Clevels:T0C1=0 Cuse_sop:T3=yes Cycc:T2=no,它们仅用于确保在主标题的CODQCD 之后生成COCQCC

现在您拥有一个有效的 JP2 容器(格式),您只需将每个单独的切片(有效的 J2K 码流)替换为您的(应该有 4 个)。

另一个重要的事情是检查所有码流是否有正确的SOT length。请记住,仅对于最后一个图块,SOT 长度为零(未定义长度)是合法的。

如果您想走得更远,您需要确保:

  • 如果您的图像具有相同的参数,请尝试重复使用 QCDCOD(我假设它们有些不同)
  • 添加TLM标记

【讨论】:

  • 您使用的 JPEG 2000 码流有点特殊。在您的代码中,您将删除 COC 和 QCC,这会导致稍后解码失败。只需选择一个更简单的 JPEG 2000 码流(您的代码对我有用,请参阅更新图像:github.com/malaterre/Jpeg2000
  • 我相信我为图块使用了错误的索引;现在一切就绪;组合图像仍然只适用于第一个图块。知道我做错了什么吗?
  • 我上传了一个有效的 JP2 样本:github.com/malaterre/Jpeg2000/commit/…
  • 谢谢你;当我分析您的 Bretagne1024.j2p 时,有四个图块,但它们具有不同的大小/内容(例如,第一个图块的比特流大小为 106 766,第二个图块的比特流大小为 106 821,它们在物理上与比特流索引 791 不同(dec)) - 我虽然你最初的前提是我们可以用我们的内容替换磁贴“占位符”;但是,瓷砖的内容(T2/T3/T4)似乎在物理上有所不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
相关资源
最近更新 更多