关于skimage.measure.shannon_entropy()的分箱数与直方图计算问询
关于skimage.measure.shannon_entropy()的分箱与直方图计算逻辑
1. 不同类型图像的分箱数
分箱规则完全由输入图像的数据类型决定:
- 整数类型(含1/2/4字节有符号/无符号灰度图):分箱数等于该数据类型的取值范围总个数,即
np.iinfo(image.dtype).max - np.iinfo(image.dtype).min + 1。例如:- uint8(1字节无符号):256个分箱(覆盖0~255)
- int8(1字节有符号):256个分箱(覆盖-128~127)
- uint16/int16:65536个分箱
- uint32/int32:2^32个分箱
- 浮点类型(如32位浮点灰度图):固定使用256个分箱。
2. 直方图的计算流程
函数会根据图像数据类型分支处理:
整数类型图像
- 通过
np.iinfo()获取当前数据类型的最小/最大取值 - 以「取值范围总个数」作为分箱数,同时指定直方图的统计范围为该类型的min到max,确保每个整数取值对应独立分箱
- 调用
np.histogram()生成直方图
浮点类型图像
- 直接传入
bins=256调用np.histogram(),分箱会自动覆盖图像像素值的实际范围,均匀划分为256个区间 - 生成直方图后,会过滤掉计数为0的分箱,避免后续概率计算出现log(0)的错误
后续统一流程:将直方图的计数转换为概率(每个分箱计数/总像素数),再通过熵公式 -Σ(prob * log(prob)/log(base)) 计算最终结果,默认以2为对数底。
内容的提问来源于stack exchange,提问作者shparekh
相关产品推荐
相关产品推荐

