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, 4 meses atrás por ZR Garcia.
      • Este tópico foi modificado 1 ano, 4 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, 4 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.