Eu estava lendo a documentação do opencv sobre retroprojeção de histograma
https://docs.opencv.org/3.4/dc/df6/tutorial_py_histogram_backprojection.html
onde me deparei com esta linha: "Além disso, o histograma do objeto deve ser normalizado antes de passar para a função backproject". Estou interessado em saber por que o histograma deve ser normalizado? Isso faz o algoritmo funcionar melhor, como se sim, por que isso?
Tentei entender a documentação por conta própria, plotei os histogramas, vi a fórmula para normalização, mas não vi benefícios nisso. Qualquer ajuda seria apreciada, obrigado.
Não é somente nesta aplicação que a normalização é desejada. Ela é feita em muitas outras aplicações também. A normalização dimensiona o histograma para que seus valores somem um total específico (por exemplo, 1, 255 ou alguma outra constante). Eis por que isso importa:
1. Consistência entre diferentes regiões de interesse (ROIs)
Os valores de bin do histograma bruto dependem do número de pixels na ROI. Uma ROI maior terá contagens de bin maiores do que uma ROI menor, mesmo se a distribuição de cores for idêntica. Sem normalização, a saída da retroprojeção seria dimensionada com o tamanho da ROI, dificultando a comparação de resultados entre diferentes objetos ou imagens. A normalização garante que o histograma represente uma distribuição de probabilidade (frequências relativas), independente do tamanho da ROI.
2. Escalonamento para saída do algoritmo
cv2.calcBackProject
produz uma imagem de canal único de 8 bits (valores de 0 a 255). Os valores de bin do histograma são mapeados diretamente para intensidades de pixel nesta saída. Se o histograma não for normalizado, os valores de bin podem exceder 255 (para ROIs grandes) ou ser muito pequenos (para ROIs pequenas), levando a cortes ou saídas fracas. A normalização para um intervalo como [0, 255] garante que a imagem de retroprojeção use o intervalo dinâmico completo de forma eficaz, tornando o resultado visualmente significativo e consistente.