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