图像熵的计算公式和应用场景_图像熵有何实践应用-CSDN博客
简介
图像熵(image entropy)是图像“繁忙”程度的估计值。
图像熵表示为图像灰度级集合的比特平均数,单位比特/像素,也描述了图像信源的平均信息量。对于离散形式的二维图像,其信息熵的计算公式为:
对于上式,其中,pi 为每一灰度级出现的概率。
熵指的是体系的混乱的程度,对焦良好的图像的熵大于没有清晰对焦的图像,因此可以用熵作为一种对焦评价标准。熵越大,图像越清晰。另外,对于没有内容的图像,图像熵也会很低,因此可以作为判断图像是否内容为空的依据。
代码
经过我的修改,cv2有时候不支持中文路径,很麻烦,所以改成用pillow了
# encoding=utf-8
import math
import numpy as np
from PIL import Image
def image_entropy(img_path):
"""
图片熵如果小于2的话基本是没啥内容的图片了,可以扔了
:param img_path: 图像的路径
:return: 图片熵的值
"""
tmp = [0 for _ in range(256)]
k = 0
res = 0
image = Image.open(img_path)
image = image.convert('L') # 图像熵的计算只能使用灰度图像
image = image.resize((100, 100)) # 将图片缩放以加快计算速度,实测产出的值差距不大
img = np.array(image) # 转化为向量形式
for i in range(len(img)):
for j in range(len(img[i])):
val = img[i][j]
tmp[val] = float(tmp[val] + 1)
k = float(k + 1)
for i in range(len(tmp)):
tmp[i] = float(tmp[i] / k)
for i in range(len(tmp)):
if tmp[i] == 0:
res = res
else:
res = float(res - tmp[i] * (math.log(tmp[i]) / math.log(2.0)))
return res
if __name__ == '__main__':
p = r'C:\Users\QZQ\Project\resource-keeper\test\21_1.jpg'
print(image_entropy(p))
[文章导入自 http://qzq-go.notion.site/c39faaa1ba4b46429e8b55f8c2a8b02a 访问原文获取高清图片]