4,248
社区成员
发帖
与我相关
我的任务
分享
//计算图像熵
double motionDetect::calcEntropy(Mat &img)
{
int width = img.cols;
int height = img.rows;
//计算每个灰度像素的占比
int count[256] = { 0 }; //每个像素的个数
double ratio[256] = { 0.0 }; //每个像素的占比
for (int row = 0; row < height; row++)
{
for (int col = 0; col < width; col++)
{
int pixelVal = static_cast<int>(img.at<uchar>(row, col));
count[pixelVal]++;
}
}
for (int i = 0; i < 256; i++)
{
ratio[i] = count[i] * 1.0 / (width*height*1.0);
}
//计算熵
double val[256] = { 0.0 };
double entropy = 0.0;
for (int i = 0; i < 256; i++)
{
//f * log2 f
//log2 f = log(f)/log(2);
if (ratio[i] == 0) {
val[i] = 0;
}
else {
val[i] = ratio[i] * log(ratio[i]) / log(2);
}
entropy -= val[i];
}
return entropy;
}