利用图像二维熵实现视频信号丢失检测(Signal Loss Detection) ...

打印 上一主题 下一主题

主题 526|帖子 526|积分 1578

1 图像二维熵


  • 图像二维熵作为一种特征评价尺度能够反映出整个图像所含平均信息量的高低,熵值(H)越大则代表图像所包含的信息越多,反之熵值(H)越小,则图像包含的信息越少。对于图像信息量,可以简单地认为图像的边缘信息越多则图像的信息量越大。二维熵公式如下所示:

2 信号丢失检测

2.1 画面对比


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

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

    相较于信号丢失画面,正常图像具有更高的信息量,其对应的二维熵值更大
2.2 基于图像二维熵的图像信号丢失检测C++实现(使用OpenCV)


  • Step1:将输入的BGR图像转换为GRAY灰度图像。
    Step2:计算图像中每个像素点对应地K(本文取K=8)邻域像素均值。
    Step3:统计各(像素值,K邻域像素均值)二元组出现概率。
    Step4:计算图像二维熵H。
    Step5:将H与预设阈值Threshold进行比较,判断图像是否存在信号丢失异常。
[code]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);// 256 * 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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

忿忿的泥巴坨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表