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?

Visualizando 2 posts - 1 até 2 (de 2 do total)
  • Autor
    Posts
  • #38189
    ZR Garcia
    Participante

    Prezados, umas dúvidas pfv.

     

    Qual o motivo de se fazer a detecção usando a imagem em escala de cinza? É somente rapidez no processamento ou é exigencia da função detector_facial.detectMultiScale()? Tive esta dúvida pois fiz um teste usando a imagem colorida e o primeiro resultado (fazendo todo resto idêntico a vídeo-aula) detectou 5 faces e não 6.

    Outra questão é qual imagem colorida usar, a BGR ou a RGB? No mesmo teste usei a RGB e foram detectadas 5 faces contra 6 quando usado BGR. Como o algoritmo trata isso? Quero dizer, como a função detector_facial.detectMultiScale() trata isso? Ela tem que receber a imagem em um formato específico?

    Outra dúvida é em relação ao tamanho da imagem, a aula sugere redimensionar a imagem mas por que escolheu-se 800×600? Digo isso pois fiz um teste com a imagem real e fazendo todo resto igual houve 7 detecções de faces, achou, inclusive, faces nas mangas da camisa do cara de xadrez. A pergunta é, para qual tamanho devo redimensionar a minha imagem? Isso é caso a caso? Se eu tiver um acervo de imagens de diferentes resoluções tenho que configurar para todas individualmente?

    Obrigado

     

    • Este tópico foi modificado 1 ano, 3 meses atrás por ZR Garcia.
    • Este tópico foi modificado 1 ano, 3 meses atrás por ZR Garcia.
    #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, 3 meses atrás por Gabriel Alves.
Visualizando 2 posts - 1 até 2 (de 2 do total)
  • Você deve fazer login para responder a este tópico.