Entendimento de características elementares independentes robustas binárias (“BREVE”)

14

Como os descritores no algoritmo BRIEF são compatíveis entre si?

Como a imagem do modelo é encontrada na outra imagem? Como comparamos os descritores? Eu li esse artigo, mas não entendi como eles o fizeram.

Eles escreveram que compararam os descritores usando a distância de Hamming, mas como é alcançada a invariância a mudanças na iluminação, tamanho, etc.?

maximus
fonte

Respostas:

15

Primeiro de tudo, não existe 'modelo' neste documento - a palavra 'modelo (s)' tem um significado diferente no Computer Vision.

O método usado neste artigo é relativamente direto. Deixe-me quebrar isto para você. Há três coisas importantes que você precisa fazer ao executar tarefas como reconhecimento de objetos, correspondência de imagens, costura de imagens e outras similares, usando Recursos Locais

A primeira coisa importante é a detecção; Nesta etapa, você deseja detectar pontos de interesse ou pontos-chave, e o que isso significa é que você deseja escolher pontos locais (basicamente pequenos patches) que você acha interessantes na imagem; existem várias maneiras de fazer isso; este artigo não contribui nesta área. No entanto, parece que eles usam o detector de recursos SURF e os pontos-chave do CenSurE (você pode consultá-los se quiser saber mais sobre eles. Não falarei sobre essa etapa, exceto que eles usam recursos como gradientes etc.), o que significa que se você tem uma foto, é improvável que um ponto no meio do céu seja escolhido como um ponto de interesse, porque os pixels ao redor desse ponto são todas as mesmas intensidades, as coisas que estão "ocupadas" tendem a ser escolhidas como pontos de interesse (por exemplo, mesa / arestas / cantos da construção)).

Após a detecção, o recurso Descriçãosegue. Você conhece os pontos interessantes da imagem e agora deseja descrevê-los (basicamente, você deseja descrever os pontos / correção em torno dos pontos interessantes). SIFT é um descritor de recurso popular. Neste artigo, eles apresentam um novo, chamado BREVE. BRIEF é baseado em comparações, então digamos que temos um patch (50 pixels por 50 pixels), escolhemos dois pontos e comparamos as intensidades dos dois pontos, se o primeiro ponto for maior que o segundo, atribuímos o valor ' 1 ', caso contrário' 0 ', fazemos isso para vários pares e terminamos com uma sequência de valores booleanos. Agora, a grande questão é 'como você escolhe o par de pontos?', No artigo eles explicaram 5 maneiras, relativamente semelhantes, descreverei o primeiro. O que você faz é escolher uniformemente (probabilidade igual) um ponto de -S / 2 a S / 2, no nosso exemplo, dissemos que o tamanho do patch é 50, por isso escolhemos um ponto entre -25 e 25. Supondo que a coordenada 0,0 esteja localizada no centro do patch. Então, aqui está um exemplo;

Queremos selecionar o primeiro par, cada ponto consiste em coordenadas (X, Y), para selecionar uniformemente a coordenada X do primeiro ponto, depois a coordenada Y do primeiro ponto, vamos assumir que é (10, -1) , agora o segundo ponto; selecionamos uniformemente a coordenada X para o segundo ponto, e a coordenada Y para o segundo ponto, vamos assumir que é (-2,20), agora obtemos os valores de intensidade para cada ponto e vemos qual possui os maiores valores de intensidade - se primeiro for maior, atribuímos o primeiro valor booleano a '1'; caso contrário, atribuímos '0'. Fazemos isso para muitos pares e acabamos com um vetor de valores booleanos.

* Ponto muito importante: Presumo que, para que isso funcione, você terá que especificar um valor inicial antes do gerador aleatório. O que isso significa é que você deseja escolher os mesmos valores para cada patch - isso é super importante porque, quando você compara / combina os patches, todo o sistema irá falhar se não forem escolhidos exatamente da mesma maneira. - espero que isso faça sentido quando você ler a etapa correspondente.

Então, fazemos isso para cada ponto de interesse que foi detectado pelo detector. Para cada ponto de interesse, obteremos um vetor de valores booleanos.


Agora, para combinar duas imagens ( terceiro passo; correspondência ), fazemos exatamente a mesma coisa para a outra imagem, detectamos e depois descrevemos usando o BREVE. Por exemplo, digamos que temos 10 pontos de interesse em cada imagem (isso sempre funciona se obtivermos os 10 pontos mais interessantes em cada imagem), usamos BRIEF para descrever cada patch usando, por exemplo, 50 pares, para que cada imagem seja descrita por 10 vetores de 50 valores booleanos.

Para comparar as duas imagens, encontramos o vizinho mais próximo de cada vetor da primeira imagem para o outro vetor da segunda imagem. Usamos a distância de Hamming, que é bem rápida, exemplo de distância de Hamming

hammingDistance ((0, 1, 1), (0, 0, 0)) = 2

hammingDistance ((0, 1, 1), (0, 1, 1)) = 0

hammingDistance ((0, 1, 1), (1, 0, 0)) = 3

hammingDistance ((0, 1, 1), (1, 1, 1)) = 1

Basicamente, quantas correspondências erradas

espero que ajude

Roronoa Zoro
fonte
Muito obrigado, eu pude entender o algoritmo. Mas ainda tenho algumas perguntas: que tal afins, mudanças de perspectiva e mudanças de iluminação? A cadeia de bits será semelhante no caso de haver uma alteração na iluminação ou na perspectiva?
maximus
Se a quantidade de mudança de iluminação for igual para todos os pixels, sim, ainda funcionará, se for diferente de pixel para pixel (a iluminação de alguns pixels aumentou, outros diminuiu), isso é um problema. A afinidade parece estar funcionando bem (com base nos resultados), mas com certeza chegará a um ponto em que para de funcionar (na verdade, nos resultados (Fig.3), eles mostram que - você pode fazer o download das imagens e ver o que Wall 1 | 2, Wall 1 | 3 corresponde a). O método deles não é invariável para a rotação (não é tão difícil de ver) e eles explicitamente mencionam isso.
Roronoa Zoro
Obrigado pela sua explicação. Eu realmente entendo muito bem o descritor BREVE.