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