Métodos de pré-processamento sugeridos para OCR em imagens circulares

8

Olá, esta é minha imagem de amostra. Vou fazer a detecção de caracteres em tempo real em imagens como essa.

Eu tentei SURF, SIFT, MSER e correspondência de modelo na imagem original sem qualquer pré-processamento. Posso detectar caracteres, mas quando a imagem muda, esse método de detecção de recursos não funciona porque não há muitos pontos de interesse nos caracteres da imagem. Não sei exatamente que tipo de pré-processamento devo fazer para obter maior precisão.

então minha pergunta é quais métodos vocês podem sugerir para a detecção de caracteres com maior precisão.

desde já, obrigado.

insira a descrição da imagem aqui

Anar Bayramov
fonte

Respostas:

8

Aqui está o que eu fiz para um cliente (o que você está perguntando é o mesmo).

Supondo que você tenha acesso a determinado tipo de padrão na imagem (ou no centro do furo), você sempre pode detectar o modelo para obter a localização de um possível desmanche:

Correspondência de padrões

Observe que na imagem transformada, duas regiões de interesse são definidas e a região na qual gostaríamos de ler os personagens é o toro situado entre dois círculos. Usando essas informações, podemos distorcer esta imagem usando uma transformação polar inversa para obter:

inverse_polar_transform

Também forneço o código MATLAB para essa transformação nesta postagem de troca de arquivos .

Na próxima etapa, graças à correspondência do modelo, os caracteres a serem lidos sempre ficam na região local definida na imagem acima. Agora, se você possui iluminação apropriada, a segmentação de caracteres não passa de um conjunto trivial de operações de processamento de imagem:

segmentação de caracteres

Os componentes conectados obtidos eventualmente são alimentados em uma rede neural ou em um SVM, primeiro para treinar e depois classificar. Esta parte é composta apenas por uma tarefa básica de aprendizado de máquina, que não vou entrar em detalhes aqui.

Não se esqueça de cuidar bem da iluminação, pois ela está quase resolvendo o problema pela metade.

Tolga Birdal
fonte
obrigado pela resposta! você se importa de compartilhar a função polar inversa para obter uma imagem linear?
Anar Bayramov
11
Publiquei uma implementação de amostra no MATLAB FileExchange. Você pode encontrá-lo aqui: mathworks.com/matlabcentral/fileexchange/48911
Tolga Birdal
@TolgaBirdal É possível explicar como você implementou a segmentação de caracteres?
Ahasbini
Bem, respectivamente, ele é composto de limiar local + análise de componente conectado + filtro de tamanho + programação dinâmica para dividir a região de interesse restante em caracteres individuais. Eu acho que cada passo é auto descritivo:)
Tolga Birdal
11
sim, iria conectá-lo. Então, pode-se pesquisar sobre os possíveis pontos de divisão e dividir o texto 'pendente' horizontalmente em partes separadas. Isso resultará em 'p', 'e', ​​'n' e 'd'. Para decidir onde dividir, pode-se usar muitas técnicas, incluindo alguma forma de programação dinâmica para satisfazer restrições globalmente. Não vou entrar em detalhes disso agora. Uma abordagem simples e gananciosa apenas cortaria o texto de um ponto em que a largura do caractere fosse suficientemente grande e o ponto de contato tivesse alguns pixels.
Tolga Birdal