Pergunta

o que eu quero fazer é um reconhecimento de imagem para um aplicativo simples:

  1. determinada imagem (500 x 500) pxs (fundo 1 cor)
  2. a imagem terá apenas 1 figura geométrica (triângulo ou quadrado ou smaleyface :)) de (50x50) pxs.
  3. python vai fazer o reconhecimento da figura e exibir o geométrica figura é.

quaisquer links? alguma dica? qualquer API? thxs:)

Foi útil?

Solução

A ferramenta python cadeia típica seria:

Até diferenciando-se a formas , gostaria de obter sua silhueta, olhando para a forma do fundo. Eu seguida, detectar o número de cantos utilizando um algoritmo de detecção de href="http://en.wikipedia.org/wiki/Corner_detection" rel="noreferrer"> canto da detecção de cantos de Harris com Scipy .

Editar:

Como você menciona nos comentários, o blog não apresentou a função que produz um kernel gaussiano necessário no algoritmo. Aqui está um exemplo de uma função tal do Scipy Cookbook (grande recurso btw):

def gauss_kern(size, sizey=None):
    """ Returns a normalized 2D gauss kernel array for convolutions """
        size = int(size)
        if not sizey:
            sizey = size
        else:
            sizey = int(sizey)
        x, y = mgrid[-size:size+1, -sizey:sizey+1]
        g = exp(-(x**2/float(size)+y**2/float(sizey)))
        return g / g.sum()

Outras dicas

OpenCV tem ferramentas de análise blob, ele vai te dar métricas sobre a forma que você pode alimentar para o seu algoritmo de reconhecimento de padrões favorito :) por exemplo. rectângulo tem 1,0 rácio para a área (altura * largura) /, quando a relação de círculo é de cerca de 0.78.

Você aponta a figura geométrica é 50x50 px. Se tamanho e orientação das figuras geométricas são fixa , você tem um problema clássico de harmonização template , adequado ao método de correlação . Você pode aplicar o casamento de modelos na imagem original ou em uma saída de detecção de fronteira.

Caso contrário, se o tamanho (escala) e / ou orientação são arbitrárias, Fourier descritores pode ser aplicada. Estes descritores são de rotação e escala invariantes.

Todos estes métodos podem ser codificados utilizando OpenCV, NumPy ou SciPy.

Se você sabe o statespace dos seus dados, você pode usar Análise de Componentes Principais. Com PCA todos os objetos devem ser colocados (no centro da tela). PCA não vai fazer a detecção, mas vai separar objetos em camadas únicas em que você pode identificar como sendo um triângulo, etc. Além disso, note: esta não é a escala ou invariantes rotação.

[não me lembro o que esta técnica é chamada, mas a sua semelhante à forma como o posto de correio não handwritting rec] Se você pode lidar apenas curvfaces não curvas, você poderia fazer a detecção de bordas, e depois fazer a amostragem nos cruzamentos para obter uma aproximação de similaridade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top