我正在阅读有关直方图反投影的 opencv 文档
https://docs.opencv.org/3.4/dc/df6/tutorial_py_histogram_backprojection.html
我偶然看到了这句话:“此外,在传递到反向投影函数之前,应该对对象直方图进行归一化”。我感兴趣的是,为什么要对直方图进行归一化?这是否会使算法功能更好,如果是这样,为什么呢?
我尝试自己理解文档,绘制直方图,查看标准化公式,但我没有看到它的好处。任何帮助都将不胜感激,谢谢。
我正在阅读有关直方图反投影的 opencv 文档
https://docs.opencv.org/3.4/dc/df6/tutorial_py_histogram_backprojection.html
我偶然看到了这句话:“此外,在传递到反向投影函数之前,应该对对象直方图进行归一化”。我感兴趣的是,为什么要对直方图进行归一化?这是否会使算法功能更好,如果是这样,为什么呢?
我尝试自己理解文档,绘制直方图,查看标准化公式,但我没有看到它的好处。任何帮助都将不胜感激,谢谢。
不仅此应用程序需要标准化。许多其他应用程序也需要标准化。标准化会缩放直方图,使其值总和为特定总数(例如 1、255 或其他常数)。这就是为什么标准化很重要:
1.不同感兴趣区域 (ROI) 的一致性
原始直方图的 bin 值取决于 ROI 中的像素数量。即使颜色分布相同,较大的 ROI 的 bin 计数也会高于较小的 ROI。如果不进行归一化,反向投影输出将随 ROI 大小而缩放,因此很难比较不同对象或图像的结果。归一化可确保直方图表示概率分布(相对频率),与 ROI 大小无关。
2.算法输出的缩放
cv2.calcBackProject
生成 8 位单通道图像(值 0-255)。直方图 bin 值直接映射到此输出中的像素强度。如果直方图未归一化,bin 值可能会超过 255(对于较大的 ROI)或非常小(对于较小的 ROI),从而导致输出被剪切或模糊。归一化到 [0, 255] 之类的范围可确保反投影图像有效使用整个动态范围,从而使结果在视觉上有意义且一致。