Prepare imagem complexa para OCR

Quero reconhecer dígitos de um cartão de crédito. Para piorar as coisas, não é garantido que a imagem de origem seja de alta qualidade. O OCR deve ser realizado através de uma rede neural, mas esse não deve ser o tópico aqui.

O problema atual é o pré-processamento da imagem. Como os cartões de crédito podem ter fundos e outros gráficos complexos, o texto não é tão claro quanto na digitalização de um documento. Fiz experimentos com detecção de borda (Canny Edge, Sobel), mas não foi tão bem-sucedido. Calcular também a diferença entre a imagem em escala de cinza e a imagem borrada (conforme indicado emRemova a cor de fundo no processamento de imagem para OCR) não levou a um resultado OCRable.

Acho que a maioria das abordagens falha porque o contraste entre um dígito específico e seu plano de fundo não é forte o suficiente. Provavelmente, é necessário segmentar a imagem em blocos e encontrar a melhor solução de pré-processamento para cada bloco?

Você tem alguma sugestão de como converter a fonte em uma imagem binária legível? A detecção de borda é o caminho a seguir ou devo seguir o limiar básico de cores?

Aqui está uma amostra de uma abordagem de limiar de escala de cinza (onde obviamente não estou satisfeito com os resultados):

Imagem original

Imagem em escala de cinza:

Imagem limite:

Obrigado por qualquer conselho, Valentin

questionAnswers(6)

yourAnswerToTheQuestion