zl程序教程

您现在的位置是:首页 >  后端

当前栏目

在OpenCV里实现计算图像信息熵

Opencv计算 实现 图像
2023-09-14 09:10:32 时间

在对图像进行编码处理过程中,很自然就会出现一个问题:表示一幅图像的灰度级到底需要多少比特?也就是说不丢失信息的情况下是否存在一个最小数据来说明已经足够充分地描述这幅图像。信息熵可以衡量变量的不确定性,变量的不确定性越大,熵也就越大。因此信息论里提供了计算信息熵的公式:

在图像里,由于是采用二进制表示,所以是基于2为底的对数,可以采用下面的代码来计算这个公式的值,这值就是表示变长编码时,平均码长的位数。

例子代码如下:

#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import numpy as np
import cv2
from matplotlib import pyplot as plt

#计算信息熵
def entropy(labels, base=None):
    value,counts = np.unique(labels, return_counts=True)
    norm_counts = counts / counts.sum()
    print(norm_counts)
    base = e if base is None else base
    return -(norm_counts * np.log(norm_counts)