利用图像二维熵实现视频信号丢失检测(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码差不多,关键 ... 
随机推荐
- pymysql.err.OperationalError: (1054, "Unknown column 'aa' in 'field list'")(已解决)
			错误描述: 今天使用python连接mysql数据库进行数据添加时,出现报错"pymysql.err.OperationalError: (1054, "Unknown colum ... 
- Zookeeper安装学习(二)
			学习内容:Zookeeper集群安装(Zookeeper版本:Zookeeper3.5.7:注:master,s1,s2都需要部署) 解压安装: (1)在主机 master 解压 Zookeeper ... 
- 满满干货!手把手教你实现基于eTS的分布式计算器
			最近收到很多小伙伴反馈,想基于扩展的TS语言(eTS)进行HarmonyOS应用开发,但是不知道代码该从何处写起,从0到1的过程让新手们抓狂. 本期我们将带来"分布式计算器"的开发 ... 
- Mac下最好用的SSH连接客户端 (Termius)
			Termius是微软的一款SSH终端工具,它支持多平台.而且操作界面十分ha好看且简洁,今天分享给大家️ 软件下载 关注下方公众号,回复termius获取下载地址 软件功能介绍 Termius M ... 
- Linux下添加MySql组件后报无权限问题解决
			Tomcat日志报错如下: Caused by: java.sql.SQLException: Access denied for user 'root'@'localhost' (using pas ... 
- Flink使用Pod Template将状态快照(Checkpoint、Savepoint)存储在NFS
			背景 Flink 版本 1.13.3,使用 native k8s 部署模式,原采用 HDFS 作为状态快照(Checkpoint.Savepoint)的存储地址,但是由于仅使用了其 HDFS 作为状态 ... 
- 重学ES系列之新增的几个循环方法
			<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
- Linux shell脚本算术运算和逻辑运算
			算术运算 默认不支持算数运算.所以需要特定的语法来完成, shell进行算数运算的工具: let declare (())或$(())或$[] bc let: 格式: let var=算术表达式 例如 ... 
- 12月15日DP作业
			[APIO2014]连珠线 考虑一组以 \(x\) 为中点的蓝边,有两种可能: \[son[x]->x->fa[x] \] \[son[x]->x->son[x] \] 其中若 ... 
- meet in the middle 复习笔记
			前言 若干年前看过现在又忘了.这么简单都忘 所以今天来重新复习一下. 正题 考虑这样的问题: 给定 \(n\) 个物品的价格,你有 \(m\) 块钱,每件物品限买一次,求买东西的方案数. \(n\le ... 
