Eu sou um cara novo em processamento de imagens e visão computacional, então essa pergunta pode ser estúpida para você.
Acabei de aprender alguns algoritmos de detecção e descrição de recursos, como Harris, Hessian, SIFT, SURF , eles processam imagens para descobrir esses pontos - chave e depois calculam um descritor para cada um, o descritor será usado para a correspondência de recursos.
Eu tentei o SIFT e o SURF, descobrindo que eles não são tão robustos quanto eu pensava, já que para 2 imagens (uma é girada e afinada um pouco), elas não combinam bem com os recursos, entre quase 100 pontos, apenas 10 partidas são boas.
Então eu me pergunto
Para que podemos usar esses algoritmos de detecção de recursos na prática? Existem algoritmos mais robustos para detecção e correspondência de recursos? Ou SIFT e SURF já é bom, só preciso refiná-lo para uso posterior?
Outro problema é que eu pensei que esses algoritmos não são exatamente para aplicação em tempo real (sem considerar a implementação de vários núcleos), mas existem alguns produtos comerciais (como o Kinect) que funcionam e respondem em tempo real! Presumo que esses produtos também detectem e correspondam aos recursos do que veem , eles usam algoritmos como SIFT ? Como eles conseguiram detectar recursos tão bem?
Com meu conhecimento limitado, sei que a correspondência de recursos pode ser usada para descobrir os mesmos objetos em duas imagens ou estimar homografias, mas qualquer outro objetivo para a correspondência de recursos?
Respostas:
Os pontos-chave da imagem são um recurso essencial em muitos softwares de processamento de imagem e vídeo, tanto industriais quanto acadêmicos. O princípio por trás é sempre o mesmo:
Agora, mais alguns detalhes.
Por que detectar pontos? Basicamente, porque um ponto é uma interseção de duas linhas. Como tal, é detectado com muito mais precisão (e de maneira mais estável) como linhas ou outros recursos (área, etc.). Esse é um conhecimento comum do Computer Vision, mais tarde provado em um artigo de Mikolajczyk. Isso está profundamente enraizado em qualquer detector de ponto: por exemplo, o detector de ponto Harris depende da matriz Hessian para verificar se há duas linhas de cruzamento.
Por que a parte da descrição é opcional? Os detectores de ponto básico (Harris, SUSAN, Moravec, FAST) não são fornecidos com um descritor. O processo de correspondê-los é puramente baseado em localização. Assim, eles são usados principalmente para processamento de vídeo. A intuição subjacente é que você pode ter muitos pontos e, em seguida, um processo de estimativa robusto (por exemplo, RANSAC). No entanto, os pontos-chave recentes (SIFT e os que vieram depois) incorporam um descritor de patches de imagem, porque devem ser usados em situações mais complexas (detecção de objetos, correspondência grande de linha de base ...).
Qual é a diferença entre Harris / Hessian e SIFT / SURF? Além da parte do descritor, o SIFT / SURF também inclui uma localização em escala . Assim, quando você detecta um ponto SIFT / SURF, espera encontrá-lo novamente, mesmo que sua imagem tenha sido ampliada / reduzida, etc.
Qual é a diferença entre SIF e SURF? Bem, o SURF é, na verdade, principalmente uma versão aproximada do SIFT, mais adequada para cálculos rápidos (usando imagens integrais). Consequentemente, o SURF não é tão estável (como "bom") quanto o SIFT em transformações afins, mas chega a algo como 1/10 do custo computacional.
Eles são adequados para software em tempo real? Sim, com certeza para Harris. O SURF foi projetado para ser rápido, portanto, uma boa implementação também deve ser rápida. O SIFT não foi projetado para velocidade, mas você pode encontrar implementações de GPU. Mas se você realmente quer ser rápido, mesmo em dispositivos de gama baixa, precisa verificar pontos recentes, como FAST (detector), BREVE, ORB, BRISK, FREAK (descritores binários).
O que podes fazer com eles? Bem, muitas coisas. Ao rastrear pontos nos vídeos, você pode estabilizá-los, aumentá-los com objetos, rastrear objetos. Ao combinar pontos entre as câmeras, você pode automatizar o processo de calibração dos dutos de reconstrução 3D. Ao combinar pontos em partes do objeto, você pode detectar objetos. E provavelmente muito mais ...
fonte
Bem, essa é uma ótima resposta do @sansuiso, então vou me concentrar nos vários usos possíveis dos pontos-chave detectados e descrever alguns exemplos para você. Certamente há mais usos, os listados são baseados apenas no que entrei em contato até agora.
Recuperação de imagem baseada em conteúdo (CBIR) Você trata os recursos (os vetores de recursos obtidos após aplicar os descritores de recursos aos pontos detectados) como palavras visuais . Nessas palavras visuais, você aplica técnicas de lista de palavras , que foram introduzidas pela primeira vez para recuperação de texto (pense no Google). Dei uma resposta bastante detalhada sobre isso aqui (veja também as referências). Isso permitirá que você:
("Grosso") Estimativa de homografia em pares de imagens Detecte recursos, faça correspondências, escolha as correspondências mais robustas e depois calcule a homografia com base nessas correspondências. Existem algumas técnicas para melhorar o desempenho: além de apenas descritores correspondentes, as informações espaciais também podem ser usadas (por exemplo, uma correspondência pode ser rejeitada se os vizinhos da imagem A não corresponderem na mesma vizinhança na imagem B - exemplo de técnica próxima o final deste artigo pode ser usado, por exemplo, em:
Rastreamento de recursos Não posso contar muito sobre como isso é feito, pois não fiz muito rastreamento sozinho, mas posso dar alguns exemplos de quando isso pode ser útil. A ideia é selecionar alguns pontos de interesse e seguir sua posição no vídeo de quadro a quadro. Exemplos (eu já vi):
fonte
Existe um site que fornece muitas informações sobre suas consultas: http://www.robots.ox.ac.uk/~vgg/research/affine/
Ele contém informações sobre detectores e descritores de recursos, seu desempenho atual e qual é o melhor em qual cenário.
Este campo ainda tem muito a continuar.
Por exemplo, quando você deseja fazer a reconstrução estéreo, esses algoritmos geralmente falham no caso de imagens de pontos de visualização múltipla. Você pode tentar algo disso.
fonte