gpt4 book ai didi

c++ - 从 JPG 图像中去除高频系数

转载 作者:太空宇宙 更新时间:2023-11-04 14:19:36 25 4
gpt4 key购买 nike

基于此question's回答,我需要在解压缩过程中从我的图像中删除高频 DCT 系数以获得更小的图像。

我一直在寻找一种方法来做到这一点,但似乎并没有那么简单。我有以下两个循环在我的代码中执行 IDCT,并在 8 x 8 block 的子集上执行循环,只给出非常失真的图像。

 for (coef = 0;  coef < 64;  coef +=8)
njRowIDCT(&nj.block[coef]); //Inverse Discrete Cosine Transform
for (coef = 0; coef < 8; ++coef)
njColIDCT(&nj.block[coef], &out[coef], c->stride); // Inverse Discrete Cosine Transform

block 是一个包含 64 个 int 的数组

我知道我需要删除的系数位于每个 block 的右下角,但是正确删除或丢弃它们的最佳方法是什么?

最佳答案

我认为,简单地丢弃高频成分是行不通的。你的观察也证明了这一点。因为,当你对 2x2 或 4x4 block 进行平均时,你不会完全丢弃某个高频分量。相反,你降低了他们对低频的能量水平。因此,完全减少到零并不是一个好主意。

我认为,您没有足够注意高频的真正含义。请对您的图像应用 Sobel 或 Prewitt 边缘检测并将其二值化。然后查询该二值图像上的每个像素是边缘的一部分还是被丢弃。如果它是边缘的一部分,则通过“排除”当前像素对原始图像应用平均过滤器。现在,猜猜它长什么样子?

关于c++ - 从 JPG 图像中去除高频系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8666658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com