利用图像二维熵实现视频信号丢失检测(Signal Loss Detection)
1 图像二维熵
- 图像二维熵作为一种特征评价尺度能够反映出整个图像所含平均信息量的高低,熵值(H)越大则代表图像所包含的信息越多,反之熵值(H)越小,则图像包含的信息越少。对于图像信息量,可以简单地认为图像的边缘信息越多则图像的信息量越大。二维熵公式如下所示:

2 信号丢失检测
2.1 画面对比
由于信号丢失所产生的画面大部分均由简单的纯色或少色的人造图像,再加上“信号丢失”提示信息所构成,因此信号丢失画面的信息量与正常图像相比较低,因此其对应的二维熵值更小。例如:

上图所示的信号丢失画面由黑色屏幕加上信号丢失提示组成,画面简单,信息量较低。而正常画面具有更多的边缘信息,

相较于信号丢失画面,正常图像具有更高的信息量,其对应的二维熵值更大。
2.2 基于图像二维熵的图像信号丢失检测C++实现(使用OpenCV)
- Step1:将输入的BGR图像转换为GRAY灰度图像。
Step2:计算图像中每个像素点对应地K(本文取K=8)邻域像素均值。
Step3:统计各(像素值,K邻域像素均值)二元组出现概率。
Step4:计算图像二维熵H。
Step5:将H与预设阈值Threshold进行比较,判断图像是否存在信号丢失异常。
bool SignalLossDetection::SignalEntropyLossException(cv::Mat& inputImg, double threshold)
{
//convert the input BGR image to GRAY iamge
cv::cvtColor(inputImg, inputImg, cv::COLOR_BGR2GRAY);
inputImg.convertTo(inputImg, CV_64F);
cv::Mat imgEntropyMap= cv::Mat::zeros(256, 256, CV_64F);// 255 *256 entropy map
//calculate the mean value of K=8 neighborhood
cv::Mat meanKernal(3, 3, CV_16S);
short mean[]{ 1,1,1,
1,0,1,
1,1,1 };
meanKernal.data = (unsigned char*)mean;
cv::Mat meanMap;
cv::filter2D(inputImg, meanMap, -1, meanKernal, cv::Point(-1, -1), 0.0, cv::BORDER_REFLECT_101);
meanMap /= 8;
//calculate the (intensity, mean intensity of the K=8 neighborhood) two-tuples of the image
inputImg.convertTo(inputImg, CV_8UC1);
meanMap.convertTo(meanMap, CV_8UC1);
for(int i{0};i<meanMap.rows;++i)
for (int j{ 0 }; j < meanMap.cols; ++j) {
imgEntropyMap.at<double>(inputImg.at<uchar>(i, j), meanMap.at<uchar>(i, j))+=1;
}
//calculate the two dimensional entropy of the image
imgEntropyMap /= (inputImg.rows * inputImg.cols);
cv::Mat logMap;
cv::log(imgEntropyMap + 1e-7, logMap);//add delta=1e-7 to avoid overflow
if (-cv::sum(imgEntropyMap)[0] <= threshold)//determine whether the image have the signal loss exception
return true;
else
return false;
}
2.3 信号丢失检测结果分析
通过对图像计算二维熵值,并设置合理阈值(Threshold)便能达到信号丢失画面检测的目的。检测结果如下:
一张正常图像的二维熵值通常较高,如下图所示H=6.6348,说明图像中存在较多的边缘信息,不存在信号丢失现象。

作为最为常见的信号丢失情况,纯色背景的信号丢失图像的二维熵值极小,如下图所示H=0.3419,表明画面存在信号丢失异常。

彩色背景的信号丢失图像使用频率虽然不如纯色背景高,但也有大量的应用场景,通过计算它的二维熵值,发现其二维熵值虽然较纯色信号丢失图像更大,但依旧不高,如下图所示H=3.3039,依然可以判断图像存在信号丢失异常。

利用图像二维熵实现视频信号丢失检测(Signal Loss Detection)的更多相关文章
- 基于图像二维熵的视频信号丢失检测(Signal Loss Detection)
1 图像二维熵 图像二维熵作为一种特征评价尺度能够反映出整个图像所含平均信息量的高低,熵值(H)越大则代表图像所包含的信息越多,反之熵值(H)越小,则图像包含的信息越少.对于图像信息量,可以简单地认 ...
- 【视频开发】OpenCV中Mat,图像二维指针和CxImage类的转换
在做图像处理中,常用的函数接口有OpenCV中的Mat图像类,有时候需要直接用二维指针开辟内存直接存储图像数据,有时候需要用到CxImage类存储图像.本文主要是总结下这三类存储方式之间的图像数据的转 ...
- PHP生成带logo图像二维码的两种方法
本文主要和大家分享PHP生成带logo图像二维码的两种方法,主要以文字和代码的形式和大家分享,希望能帮助到大家. 一.利用Google API生成二维码Google提供了较为完善的二维码生成接口,调用 ...
- android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)
写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) project下载 zbarLib编译project project下载0积分 bug 在2.3的系统中Hol ...
- 利用phpqrcode二维码生成类库和imagecopymerge函数制拼接图片的经验
前期准备 引入phpqrcode类库(下载地址:https://sourceforge.net/projects/phpqrcode/) PHP开启GD扩展库支持 1.利用phpqrcode生成二维码 ...
- 【opencv】 solvepnp 和 solvepnpRansac 求解 【空间三维坐标系 到 图像二维坐标系】的 三维旋转R 和 三维平移 T 【opencv2使用solvepnp求解rt不准的问题】
参考: pnp问题 与 solvepnp函数:https://www.jianshu.com/p/b97406d8833c 对图片进行二维仿射变换cv2.warpAffine() or 对图片进行二维 ...
- 利用phpqrcode二维码生成类库合成带logo的二维码并且用合成的二维码生成海报(二)
前期准备 引入phpqrcode类库(下载地址:https://download.csdn.net/download/weixin_37557729/11891240:支持彩色二维码的下载地址:htt ...
- 利用免费二维码API自动生成网址图片二维码
调用第三方接口生成二维码 官方地址:http://goqr.me/api/ 示例 https://api.qrserver.com/v1/create-qr-code/?size=180x180&am ...
- DataMatrix二维条码源码分析检测识别图像位置
发布时间:2014-10-31 DataMatrix的代码结构和QR码基本相同: 其中Detector的功能还是从原始图像中找出符号码的部分,并且进行透视转换纠正扭曲. 其解码流程与QR码差不多,关键 ...
随机推荐
- 好客租房32-事件绑定this指向(class实例方法)
class实例方法 利用箭头函数的class实例方法 //导入react import React from 'react' import ReactDOM from 'react-dom' // ...
- Flask表单验证
学习内容:①判断请求方式(request.method) from flask import Flask,render_template,request app = Flask(__name__) @ ...
- 直观比较 popcount 的效率差异
问题 求 \(\sum\limits_{i=1}^{3\times 10^8} popcount(i)\) . 仅考虑在暴力做法下的效率. 枚举位 __builtin_popcount #includ ...
- transforms.py
from PIL import Image from torchvision import transforms #python的用法-->tensor数据类型 #通过transforms.To ...
- ExtJS自定义按钮颜色
直接使用CSS修饰. 这种方式操作,效果明显. 先为按钮新增一个CSS类 { xtype: 'button', //将边框.背景样式去掉 style: { border: 'none', backgr ...
- ruoyi接口权限校验
此文章属于ruoyi项目实战系列 ruoyi系统在前端主要通过权限字符包含与否来动态显示目录和按钮.为了防止通过http请求绕过权限限制,后端接口也需要进行相关权限设计. @PreAuthorize使 ...
- Linux编辑shell脚本快速启动jar包
1.上传jar包到服务器 2.创建并编辑start.sh文件 vi start.sh 将下面内容复制到文件中 ps -ef|grep xf-demo |grep -v grep |awk '{prin ...
- springboot项目上传存储图片到七牛云服务器
springboot项目上传存储图片到七牛云服务器 问题描述: 当图片存在本地时会出现卡顿的现象.比如一篇图文混排的文章,如果图片没有加载完,可能整个文章都显示不出来,因为它们都是用的同一个服务器. ...
- Git 中的回退操作:reset 和 revert
Git 中回退有 reset 和 revert,这两个的区别就是是否保留更改记录 假设当前的提交情况是:A <- B <- C <- D <- HEAD,如下图: 当前是 D, ...
- 【跟着大佬学JavaScript】之lodash防抖节流合并
前言 前面已经对防抖和节流有了介绍,这篇主要看lodash是如何将防抖和节流合并成一个函数的. 初衷是深入lodash,学习它内部的好代码并应用,同时也加深节流防抖的理解.这里会先从防抖开始一步步往后 ...