c++ - 图片熵计算

标签 c++ video entropy

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

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

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

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

例程本身应该只向前扫描,很少有适合寄存器的局部变量。

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

有什么想法吗?

最佳答案

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

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

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

对于结果,取 channel 每个字符的位数的平均值并将其除以 2^8(假设每种颜色有 8 位)。

关于c++ - 图片熵计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4358258/

相关文章:

c++ - 如何实现作用域 iostream 格式化?

c++ - MFC 网页浏览器控件 : How many (normal) lines of code does it take to simulate Ctrl+N?

php - 无法运行 exec ('ffmpeg' ); ffmpeg、wamp 和 windows 2008 服务器

php - 帮助计算(和有用性)密码熵

machine-learning - 决策树熵计算目标

image - 两幅图像的互信息和联合熵-MATLAB

C++:从指向 double 组的指针获取迭代器

c++ - 分配 std::shared_ptr

css - 在 Chrome 中调整视频宽度以删除黑条

Android:全屏打开 Flash 视频流