【问题标题】:Picture entropy calculation图片熵计算
【发布时间】:2010-12-05 10:01:49
【问题描述】:

我的录音机遇到了一些令人讨厌的问题。有些人仍在将其与模拟调谐器一起使用,如果没有信号存在,模拟调谐器往往会吐出“雪”。

问题是,当噪声输入编码器时,它会变得非常疯狂,首先消耗所有 CPU,然后最终冻结。由于记录器的要点是无论如何都要保持正常运行,因此我必须弄清楚如何进行此操作,因此编码器不会暴露于它无法处理的数据。

因此,想法是创建“熵检测器”——一个简单而小型的例程,它将遍历帧缓冲区数据并计算熵指数,即图片中的数据实际上是如何随机的。

例程的结果将是一个数字,0 表示完全背面的图片,1 表示完全随机的图片 - 雪,即。

例程本身应该只是前向扫描,很少有局部变量可以很好地放入寄存器。

我可以使用 zlib 或 7z api 来完成这样的任务,但我真的很想自己做饭。

有什么想法吗?

【问题讨论】:

  • 我认为第一个问题应该是“为什么你的编码器不能处理任何有效的输入”。
  • 我正在使用 windows 媒体编码器,我真的不能在那里做任何事情,但尽量不要用它不能或它可以很困难地处理的东西喂它。而且我们都知道,对于任何类型的压缩算法来说,噪声都是一个麻烦。

标签: c++ video entropy


【解决方案1】:

PNG 以这种方式(大约)工作:对于每个像素,将其值替换为它所具有的值减去剩下的像素值。从右到左执行此操作。

然后,您可以通过制作一个表格来计算熵(每个字符的位数),其中列出了现在哪个值出现的频率,从这些绝对值中得出相对值,并为每个元素添加 log2(n)*n 的结果。

哦,您必须为每个颜色通道(r、g、b)分别执行此操作。

对于结果,取通道每个字符的位数的平均值,然后除以 2^8(假设每种颜色有 8 位)。

【讨论】:

  • 如果我们从数据中去掉“意义”并假设我们对纯字节进行操作会怎样 - 我们不会得到准确的熵,但仍然有要衡量的数字?
  • 计算不同通道(“红色”和“绿色”)之间的差异可能会产生熵很大但实际上很小的印象
  • 我可以只将 rgb 压碎为亮度,然后从那里开始工作。 . .
猜你喜欢
  • 1970-01-01
  • 2015-01-31
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 2014-03-31
相关资源
最近更新 更多