Tenho uma imagem tirada por uma câmera de celular com foco em uma parte, digamos, um rosto ou o que seja. Eu quero saber - aproximadamente - onde fica a área focada. Por exemplo, uma caixa delimitadora em torno da área focada. exemplo:
Tenho uma imagem tirada por uma câmera de celular com foco em uma parte, digamos, um rosto ou o que seja. Eu quero saber - aproximadamente - onde fica a área focada. Por exemplo, uma caixa delimitadora em torno da área focada. exemplo:
Respostas:
Em geral, esse é um problema de segmentação de imagem ( http://en.wikipedia.org/wiki/Image_segmentation ) no qual você está tentando isolar as regiões focada nas não focadas da imagem.
De qualquer forma, as lentes ópticas são equivalentes aos filtros passa-baixo e o efeito de um filtro passa-baixo em um sinal é suavizá-lo limitando o conteúdo de frequência mais alta.
No processamento de imagens digitais, as frequências baixas correspondem a objetos grandes (forma geral) e as frequências mais altas correspondem a objetos pequenos (detalhes).
Portanto, para isolar a região focada, você pode procurar por áreas com um desvio padrão mais alto em relação às áreas desfocadas, com um desvio padrão mais baixo devido à operação de suavização da lente fora de foco.
No caso da imagem em sua postagem, é provável que o histograma exiba dois modos. Um correspondente a valores relativamente altos de desvio padrão (área focada) e um correspondente a valores relativamente baixos de desvio padrão (áreas desfocadas).
Você pode posicionar um limite, por exemplo, apenas entre os dois modos para estabelecer um critério entre suas regiões focadas e não focadas e, em seguida, selecionar todos os "patches" (ou áreas da janela MxN) cujo desvio padrão seja maior que o seu limite. (Para mais informações, consulte: http://en.wikipedia.org/wiki/Thresholding_%28image_processing%29 )
Isso isolará as partes focadas da imagem para você.
Espero que isto ajude.
Aqui está uma abordagem mais fácil, que não envolve análise de janela deslizante.
Converta sua imagem em escala de cinza (isso não é necessário, mas presumo que você tenha apenas um canal por uma questão de clareza)
Calcular o gradiente nas duas direções
Calcular a magnitude (ou apenas o quadrado do gradiente)
Soma ambas as imagens de gradiente nas duas direções
Como já foi dito, a parte focada da imagem terá frequências mais altas que a área não focada. A partir do somatório, você terminará com duas projeções, nas quais há muita variação (valores mais altos) naquela parte em que o objeto focado é colocado nessa direção. Agora você pode fazer o seguinte:
Determine o ponto inicial e final desses valores mais altos. Você pode usar um limite simples (por exemplo, 0,7 * valor máximo) ou suavizar os perfis, obter a segunda derivada e verificar os valores mais altos existentes.
As posições Iniciar / Parar da etapa anterior fornecem as posições dos pixels nas duas direções onde colocar o retângulo indicador da área de nitidez.