Responder a: Detecção de Faces: usa-se imagem colorida ou em escala de cinza?

Home Fóruns Fórum Visão Computacional: O Guia Completo Detecção de Faces: usa-se imagem colorida ou em escala de cinza? Responder a: Detecção de Faces: usa-se imagem colorida ou em escala de cinza?

#38243
Gabriel Alves
Moderador

    Olá!

    A detecção é feita em escala de cinza pois o algoritmo espera imagens assim, e além disso em escala de cinza tem menor informações e portanto o desempenho será melhor.

    Se você não fizer a conversão para escala de cinza antes de passar a imagem para o cascade (ou seja, passar a imagem com canais de cor) então isso será reconhecido pelo algoritmo e essa conversão será feita em uma etapa posterior, executada pela função detectMultiScale().

    Por isso que se você não fizer a conversão pode ser que obtenha diferentes resultados (mas eles tendem a ser mínimos). Isso porque a função de conversão para escala de cinza usada provavelmente difere da função de conversão interna usada pelo método que usamos para implementar o cascade, pois há uma infinidade de funções para conversão de imagens com 3 canais de cores para 1 canal de cor, como pode ser visto nesse exemplo (pode ver que dependendo da função, certas regiões podem ficar com um tom de cinza mais escuro ou mais claro. e se por exemplo a “confiança” de uma determinada detecção estiver perto do limiar então uma pequena diferença no tom de luminosidade de certas regiões pode ser um fator decisivo para que o cascade classifique ou não determinado objeto).

    Mas no fim, o cascade se baseará numa versão em escala de cinza da imagem, pois eles foram treinados em escala de cinza, além de que toda a sua abordagem em si se baseia na diferença de iluminação na imagem e portanto é uma técnica que por padrão não leva em consideração tons de cores nesse caso.

    Veja abaixo um artigo se quiser ver o comparativo e mais detalhes sobre as duas abordagens: https://www.researchgate.net/publication/255798161_Face_Detection_on_Grayscale_and_Color_Images_using_Combined_Cascade_of_Classifiers

    E quanto ao tamanho, simplesmente não há uma regra exata. O “melhor” tamanho é escolhido com base numa avaliação entre desempenho (muito grande começa a ficar bem pesado) e também considera-se o tamanho mínimo indicado a se usar para que detalhes importantes na imagem não sejam perdidos. Por exemplo, se sua imagem contém detalhes pequenos e o cascade deve detectar esses objetos pequenos então não dá para diminuir tanto a imagem, mas você pode reduzir sim até um ponto onde o cascade seja capaz de detectar. Por isso também que reduzir ou não a imagem pode fazer com que certos objetos sejam detectados ou não, mas as vezes apenas ao redimensionar a imagem faz com que influencie a detecção de objetos que estão num tamanho “normal” – mas aí se estiver apresentando resultados incorretos então é o caso de você precisar calibrar melhor os parâmetros da função detectMultiScale().

    Enfim, não há uma regra de melhor tamanho, mas seguindo essas dicas e através de testes você consegue chegar no tamanho mais adequado para a sua situação.

    • Esta resposta foi modificada 1 ano, 4 meses atrás por Gabriel Alves.