Então, como posso chamar a função vlubcmatch em código C Esta é uma função MEX que só está prevista para ser chamado de MATLAB. Você não pode reutilizá-lo como-é de um programa de uso geral C. O objetivo de detectar se uma imagem contém o objeto em outra imagem. Como fazer SIFT algoritmo de correspondência se eu usar vlfeat VLFeat C API não fornece SIFT funções correspondentes out-of-the-box. Então, basicamente, você precisa adaptar a chamada seção de código de teste de razão 1 desta seção de código MATLAB C que é bastante fácil (veja abaixo). A principal desvantagem se você deseja executar correspondência robusta é que esta função não leva em conta a geometria. As coordenadas dos pontos-chave. O que você precisa além disso é uma verificação de consistência geométrica que é normalmente realizada por descobrir se existe uma homografia entre as duas imagens (usando como entrada as correspondências de descritor obtidas com o teste de razão). Isso é feito com um algoritmo como RANSAC, uma vez que as correspondências podem incluir outliers. Mas também você pode acelerar o cálculo de correspondências com uma árvore kd. Assim, uma alternativa se você precisar de uma implementação C simples está confiando em Open SIFT por Rob Hess, que inclui tudo o que você precisa, bem como uma ferramenta de linha de comando pronta a usar (e, portanto, exemplo) de correspondência: K1. Número de descritores na imagem 1, K2. Número de descritores na imagem 2, ND. Descritor (128 para SIFT), descr1 e descr2. Descritores da imagem 1 e 2 resp. Na ordem principal da fila, por exemplo linhas K1 x colunas ND), trilho. Valor de limiar de teste de razão, por exemplo, 1,5 no código MATLAB. Você usará a biblioteca vlfeat da mesma forma que você usa qualquer outra biblioteca com C. Primeiro, certifique-se de ter a biblioteca instalada em seu computador e saber onde ela está instalada. Você precisará incluir o cabeçalho necessário para cada parte do vlfeat que você está usando. Geralmente um cabeçalho de biblioteca genérico para vlfeat e, em seguida, um cabeçalho específico para sift (por exemplo, incluir sift. h) (às vezes não há cabeçalho geral). Você precisará segurar o comando gcc ou g inclui o INCLUDEPATH apropriado e LIBRARYPATH para o seu ambiente que permitirá ao gcc encontrar seus arquivos vlfeat. (Por exemplo, - Ipathtodirholdingsift. h e - Lpathtovlfeatlib) Então você vai acabar com algo parecido com isto para C: Há documentação on-line que vai ajudar. Veja: como configurar um projeto C básico que usa a biblioteca VLFeat Se você tiver mais perguntas, basta soltar uma linha nos comentários. 14 de novembro de 14 às 8:07 As APIs de C são descritas em vlfeat. orgapisift. html. Existe apenas o descritor de sift gerando (extraindo) API lá. Não consigo encontrar uma API relacionada correspondente. E na fonte, eu acho vlubcmatch. c que está fazendo um algoritmo de correspondência quotbasicquot. Mas eu não sei como chamar essa função de algoritmo neste arquivo. c (onde há muitas definições de macros que parecem relacionadas ao matlab). Minha principal questão é como fazer SIFT algoritmo correspondente se eu usar vlfeat ndash mrmoment 14 de novembro de 14 at 8:52 Essa foi a principal parte da resposta. Você incluirá sift. h em seu código juntamente com o outro inclui (stdio. h, etc.). Em seguida, você usará a função, com os argumentos corretos, conforme especificado em sift. h no seu código. Você então compilará o código (ou gcc ou g) especificando a biblioteca - lvl para que o vinculador saiba incluir esse código e você pode não precisar especificar o - I47path andor - L47path para que gcc e ld encontrem o lib e sift. H, dependendo do seu ambiente. Sem truques. Ndash David C. Rankin Nov 14 14 at 8: 56vlfeat-ctypes 0.1.1 Um porto ctypes-baseado mínimo de algumas funções de vlfeat. Esta é uma porta mínima de alguns componentes da interface matlab da biblioteca vlfeat para visão de computador para Python. Biblioteca de núcleo vlfeats é escrito em C. Na prática, porém, uma quantidade significativa da biblioteca está na interface MATLAB. Este projeto é um porto de algumas funções daquela interface para python, usando ctypes. Ele contém apenas algumas funções (as necessárias para py-sdm). O processo não é muito difícil, apenas leva algum esforço. Os patches que adicionam funcionalidades adicionais são bem-vindos. Theres também um garfo de vlfeat flutuando que inclui boost :: Python wrappers. Eu não consegui fazê-lo funcionar, e não tentei muito duro porque eu vi que algumas das funções que eu precisava tinha quantidades significativas de código matlab de qualquer maneira. Você pode estar mais interessado nele, embora Andreas Muellers versão parece ser o mais recentemente atualizado. Instalação O pacote pode ser instalado por pip ou easyinstall normalmente. No entanto, para realmente usá-lo, você também precisará baixar a biblioteca binária vlfeat. Você pode instalar libvl. so (ou suas plataformas equivalentes) em algum lugar onde ctypes pode encontrá-lo sozinho, ou usar o script incluído para fazê-lo executá-lo com python - m vlfeat. download. Se você adicionar um argumento - h, ele mostrará como fazer isso com uma distribuição binária pré-baixada. Se você instalar pacotes Python com sudo. Você pode precisar fazer o mesmo para o download script. Repository acesso VLFeat está em desenvolvimento ativo. Você pode navegar em nosso repositório Git ou baixá-lo por (Isso exigirá Git para ser instalado). A parte superior do ramo principal corresponde à versão mais recente do VLFeat, mas pode ser instável. Congratulamo-nos com contribuições tanto para a documentação eo código fonte do VLFeat. Você pode criar patches contra o nosso repositório Git e enviá-los para nós para inclusão na próxima versão. Existem duas maneiras de contribuir. Para pequenas alterações, basta clonar o nosso repositório público, conforme explicado acima. Depois de ter feito e confirmado suas alterações localmente, você pode enviá-las para o projeto via e-mail usando um comando como git format-patch. Para grandes adições, preferimos lidar com a colaboração através do github. Siga seu tutorial para forjar nosso projeto e enviar suas modificações usando um pedido de pull.
No comments:
Post a Comment