从JPG图像中去除高频系数
Remove high-frequency coefficients from JPG image
根据这个问题的答案,我需要在解压过程中从图像中删除高频DCT系数,以获得更小的图像。
我一直在寻找一种方法来做到这一点,似乎不是那么简单。我有以下两个循环在我的代码中执行IDCT,并且在8 x 8块的子集上执行循环,只会给出非常扭曲的图像。
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
的数组
我知道我需要删除的系数在每个块的右下角,但是正确删除或丢弃它们的最佳方法是什么?
我认为,简单地丢弃高频成分是行不通的。你的观察也证明了这一点。因为,当你平均2x2或4x4块时,你不会完全放弃某个高频成分。相反,你降低了它们相对于低频的能级。因此,完全减少到零不是一个好主意。
我认为,你没有足够注意到高频的真正含义。请对您的图像应用Sobel或Prewitt边缘检测并将其二值化。然后查询二值图像上的每个像素,它是边缘的一部分还是被丢弃了。如果它是边缘的一部分,那么通过"排除"当前像素对原始图像应用平均过滤器。现在,猜猜它看起来像什么?
相关文章:
- Cython通过浮点数的最快方式,用于高频控制回路
- JPG-如何从ICC配置文件部分APP2读取/提取数据
- 是否有一种标准化的方法通过TCP/IP网络发送JPG图像
- 如何使用Winforms C#或C++.Net在不更改文件中其他内容的情况下修改jpg文件中的Orientation e
- 如何在c++中将image.jpg转换为image.ppm
- QUdpSocket在高频环境中的极限
- 我可以使用 stb_image_write.h 将 JPG 图像写入内存吗?
- Paths.get( "abc/def.jpg" ) 在 C 和 C++ 中获取与操作系统无关的路径的等价物是什么?
- 高频接收UDP数据包:丢包?
- 从文件中读取原始压缩缓冲区.jpg使用 jpeglib
- 将 JPG 编码数组从 ROS sensor_msgs/压缩图像保存到 roscpp 中的文件
- 将图像.jpg转换为 Base64
- 如何以CV_16UC1的方式读取JPG图像并在屏幕上打印?
- 高频插入 PostgreSQL,插入的数据要到几分钟后才能选择?
- OpenGL - SOIL 不会加载 JPG 或 PNG 图像
- 使用套接字将.jpg从 Android 发送到 c++
- 如何在C 中删除或删除.jpg和.dpx图像文件
- 有没有办法仅通过JPG文件循环
- 使用C 将JPG文件添加到输出的HTML文件中
- 从JPG图像中去除高频系数