Eu tenho tentado nos últimos dias obter uma grade de sudoku a partir de uma imagem, e tenho lutado para obter os quadrados menores da grade. Estou trabalhando na imagem abaixo. Eu pensei que processar a imagem com um filtro inteligente funcionaria bem, mas não funcionou e eu não conseguia obter todos os contornos de cada quadrado. Em seguida, coloquei o limiar adaptável, o otsu e um limiar clássico no teste, mas todas as vezes não conseguia capturar todos os quadrados pequenos.
O objetivo final é obter as células que contêm um número e reconhecer os números com pytorch, então eu realmente gostaria de ter algumas imagens limpas dos números, para que o reconhecimento não estrague tudo :)
Alguém teria uma idéia de como conseguir isso? Muito obrigado antecipadamente! : D
Respostas:
Aqui está uma solução em potencial:
Obter imagem binária. Converter imagem em escala de cinza e limite adaptável
Filtre todos os números e ruídos para isolar apenas as caixas. Filtramos usando a área de contorno para remover os números, pois queremos apenas cada célula individual
imutils.contours.sort_contours()
com o parâmetrotop-to-bottom
eleft-to-right
Aqui está a imagem binária inicial (esquerda) e os números filtrados + linhas de grade reparadas + imagem invertida (direita)
Aqui está uma visualização da iteração de cada célula
Os números detectados em cada célula
Código
Nota: A ideia de classificação foi adaptada de uma resposta anterior antiga na extração de cores do Solucionador de cubos Rubrik .
fonte
Se a imagem contiver apenas a grade de sudoku bem ajustada, uma maneira simples de conseguir isso seria dividir a imagem em uma grade 9X9 igual e tentar extrair o número em cada uma dessas grades.
fonte
Passos:
Código:
deformado:
th3:
warped2:
resultado sudoku:
Todos os dígitos extraídos:
Referências:
pontos de grade
obter recursos (de dígitos)
Amostras de imagens
fonte