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:
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:
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:
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.