问题标签 [dct]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
7660 浏览

video - 视频压缩:什么是离散余弦变换?

我已经实现了一种称为离散余弦变换的图像/视频变换技术。该技术用于 MPEG 视频编码。我的算法基于以下 URL 中提出的想法:

http://vsr.informatik.tu-chemnitz.de/~jan/MPEG/HTML/mpeg_tech.html

现在我可以转换黑白图像的 8x8 部分,例如:

进入这张图片,右上角有所有重要信息。转换后的块如下所示:

现在,我需要知道如何利用这种转变?我想检测同一图像(或另一个图像)中代表良好匹配的其他 8x8 块。

另外,这种转变给了我什么?为什么存储在转换图像右上角的信息很重要?

0 投票
2 回答
2653 浏览

jpeg - 在 BMP 到 JPEG 转换方面需要帮助

我正在编写一个 C++ 程序来将 BMP 图像转换为 JPEG。

这是我试图遵循的基本算法:

  1. 将 RGB 颜色空间转换为 Y,Cb,Cr..
  2. 将 Cb 和 Cr 向下采样 2(这意味着对于 2*2 的每个方形块有 4 个不同的 Y 值,但 1 个 Cb 和 1 个 Cr 值
  3. 将 DCT 应用于每个 8*8 像素的数据单元...
  4. 然后使用标准的 Cb 和 Cr 量化表对 DCT 系数进行量化。
  5. 做之字形排序。
  6. 使用霍夫曼编码分别对直流和交流系数进行编码。
  7. 写入正确的标头并将霍夫曼编码值写入文件...

我已经验证我正确地执行了上述操作,但我仍然遇到以下问题:

  • 生成的 JPEG 未正确显示。
  • 我制作了一个小的 8*8 24 位(颜色深度)bmp 文件,完全填充了颜色值 R=10 B=10 和 G=100...所有 64 个像素都是相同的颜色..
  • 我在每一步得到的数据如下......
    • BMP 标头大小为 40
    • 标头大小 40
    • 宽度 8
    • 身高 8
    • 飞机数量 1
    • 每像素位数 24
    • 图像尺寸 194
    • x 分辨率每米像素 2834
    • y 分辨率每米像素 2834
    • 颜色数 0
    • 小鬼颜色数 0
    • (R,B,G)=(10,10,100)的Y Cb Cr换算为(62,-29,-37)

所以让我们首先考虑 Y 分量。

Y 分量的 DCT 系数为:

在量化之后,对于 Y 分量,我得到的单个数据单元的锯齿形排序是这样的。

现在上述之字形顺序数组的霍夫曼编码为:

  • Y直流编码:00111110
  • Y ac 编码:1010(对于 ac 霍夫曼表(亮度 Y)EOB 值为 1010)
  • Cb和Cr分量的类似哈夫曼编码如下:
  • cb直流编码:11000010
  • cb ac 编码:01(对于 ac 霍夫曼表(色度 Cb,Cr)EOB 值为 01)
  • cr直流编码:110101110
  • cr 交流编码:01
  • 我得到的最终霍夫曼代码是:

    001111101010110000100111010111001 长度33

所以为了使它能被8整除,填充1就完成了。

这里每个 0 或 1 实际上是一个位,需要按原样存储在 JPEG 文件中,但由于我们不能逐位写入文件,因此总共取 8 位并转换为基数中的整数值10 并存储到一个 1 字节的字符中。

任何人都可以就我哪里出错提供任何建议吗?

0 投票
1 回答
5533 浏览

image-processing - DCT 压缩 - 块大小,选择系数

我试图了解块大小的影响以及在 DCT 压缩中选择系数的最佳策略。基本上我想问我在这里写了什么:

视频压缩:什么是离散余弦变换?

让我们假设最原始的压缩。制作图像块。在每个博客上执行 DCT 并将一些系数归零。

据我了解,块越小越好。较小的块意味着像素更相关,因此 DCT 光谱中的能量更“紧凑”。在快速变化的图像(高频)中应该更加强调它。

假设我们将一定百分比的系数归零,什么会产生最佳图像质量,小块还是大块?假设我们保留 10%、25%、50%、75%,你会说这是不同百分比的不同答案吗?

另一个问题是如何选择你保持不变的系数。免得说我必须根据位置而不是能量做出决定。你会从左上角取一个正方形吗?我已经平均了 DCT 频谱中的许多块,并得出最好的结论是从左上角取一个三角形。你怎么看?

希望我们能进行有效的讨论。

0 投票
2 回答
2110 浏览

java - Java:获取 JPEG DCT 系数直方图

我需要一个 Java 库、代码片段……来获取 JPEG 文件的 64 个 DCT 系数的频率分布。

有任何想法吗?谢谢!

0 投票
1 回答
757 浏览

java - Java 参数传递 int[][]

我正在尝试用 java 编写一个简单的 DCT 算法。我希望我的 findDCT 方法有一个像这样的整数数组作为参数:

现在,我将如何声明此方法并能够将 'int[][] f' 作为参数传递,而不是使用声明为私有变量并在当前类的构造函数中初始化的 f[][]?

0 投票
1 回答
8178 浏览

java - java中DCT和IDCT算法的问题

在这里,我的 DCT 算法类带有“applyDCT”和“applyIDCT”方法。从技术上讲,在对 0 到 255 之间的随机整数的 2x2 表进行正向 DCT(离散余弦变换)之后,然后立即对这些数字进行反向 DCT,我们应该回到我们最初拥有的原始整数。就我而言,情况并非如此。我在这里做错了什么?

这是随之而来的主要课程:

以下是结果示例:

如上所示,“Back to f”并没有显示最初包含在 f 中的相同值...

0 投票
2 回答
17505 浏览

image-processing - 从编码图像和视频中提取 DCT 系数

有没有办法从编码的图像和视频中轻松提取 DCT 系数(和量化参数)?任何解码器软件都必须使用它们来解码块 DCT 编码的图像和视频。所以我很确定解码器知道它们是什么。有没有办法将它们暴露给使用解码器的人?

我正在实施一些直接在 DCT 域中工作的视频质量评估算法。目前,我的大部分代码都使用 OpenCV,所以如果有人知道使用该框架的解决方案,那就太好了。我不介意使用其他库(也许是 libjpeg,但这似乎只适用于静止图像),但我主要关心的是尽可能少地做特定于格式的工作(我不想重新发明轮子并编写我自己的解码器)。我希望能够打开 OpenCV 可以打开的任何视频/图像(H.264、MPEG、JPEG 等),如果它是块 DCT 编码的,以获得 DCT 系数。

在最坏的情况下,我知道我可以编写自己的块 DCT 代码,通过它运行解压缩的帧/图像,然后我会回到 DCT 域。这几乎不是一个优雅的解决方案,我希望我能做得更好。

目前,我使用相当常见的 OpenCV 样板来打开图像:

我用于视频的代码同样简单:

在这两种情况下,我都得到了 BGR 格式的 3 通道IplImage。有什么方法可以得到 DCT 系数吗?

0 投票
1 回答
1147 浏览

matlab - 在 MATLAB 中查找量化层的数量

我正在研究图像处理,并且我有一张经过 DCT 处理并量化为 512 x 512 矩阵的 8 x 8 块的图像,现在我必须找出图像有多少量化级别。我是否需要获取左上角的像素并将其放入数组中,然后将其放置在图形调用上hist

0 投票
2 回答
1890 浏览

java - DCT 系数的范围 MATLAB

我试图找到一个 8 x 8 块的系数因图像的不同块而变化的范围。我是否需要为 matlab 中是否有函数的值生成直方图?

0 投票
3 回答
1035 浏览

compression - DCT压缩

DCT(D iscrete C osine T转换)如何帮助压缩声音(或任何波状数据)?根据 DCT 变换,结果有 N 个输入值和 N 个输出值。压缩在哪里以及如何实现?