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);// 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 = https://www.cnblogs.com/pandalu/p/(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(inputImg.at(i, j), meanMap.at(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,依然可以判斷影像存在信號丟失例外,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/501233.html
標籤:C++
上一篇:序列型別
