Matlab中histcounts与imhist计数及区间位置结果差异原因咨询
histcounts与imhist结果不一致的核心原因
两者的设计目标和实现逻辑完全不同,具体差异体现在三个方面:
1. 区间定义的返回形式不同
histcounts返回的l1是bin的边界值,长度为指定bin数量+1,每个bin对应l1(k) ≤ x < l1(k+1)(最后一个bin包含上限)。你示例里的l1是0、0.17、0.34…1.02,对应6个连续区间。imhist返回的l2是每个bin的中心值,长度等于指定的bin数量,每个bin的范围是l2(k) ± (1/(2*指定bin数))。你示例里的l2是0、0.2、0.4…1.0,对应6个以这些值为中心的区间。
2. 区间划分的基准范围不同
histcounts是通用统计函数,会根据输入数据的实际最小值和最大值来划分区间。你的数据min=0、max=1,所以范围是[0,1],分成6个bin后每个宽度≈0.1667,四舍五入显示为0.17,最后一个边界设为1.02是为了确保max值1.0能被包含在最后一个bin里。imhist是专门为图像数据设计的函数,默认固定范围:- 对于double类型的输入(如归一化图像),默认范围是**[0,1]**;
- 对于uint8类型,默认范围是**[0,255]**;
不会根据输入数据的实际min/max调整范围,你指定6个bin时,直接把[0,1]等分成6份,每个bin宽度固定为1/6≈0.1667。
3. 数据归属的实际区间差异
因为上述两点差异,同一个数据点会被分到不同的bin中:
- 比如你的数据0.1429:在
histcounts中属于00.17的bin(计数到`c1[1]`);在`imhist`中属于中心为0.2的bin(范围0.11670.2833,计数到c2[2])。 - 再比如0.5:在
histcounts中属于0.340.51的bin(`c1[3]`);在`imhist`中属于中心为0.6的bin(范围0.50.7,计数到c2[4])。
这些差异直接导致了两者的计数和区间相关结果完全不同。
内容的提问来源于stack exchange,提问作者HappyPy
相关产品推荐
相关产品推荐

