Como remover defeitos de convexidade em um quadrado Sudoku?

| | | | | | | | | |

Eu estava fazendo um projeto divertido: Resolvendo um Sudoku a partir de uma imagem de entrada usando OpenCV (como no Google goggles etc). E completei a tarefa, mas no final encontrei um pequeno problema pelo qual vim aqui.

Fiz a programação usando a API Python do OpenCV 2.3.1.

Abaixo é o que eu fiz:

  1. Leia a imagem
  2. Encontre os contornos
  3. Selecione aquele com área máxima (e também um pouco equivalente ao quadrado) .
  4. Encontre os pontos de canto.

    por exemplo, abaixo:

    digite a descrição da imagem aqui

    (Observe aqui que a linha verde coincide corretamente com o verdadeiro limite do Sudoku, para que o Sudoku possa ser distorcido corretamente

    strong>. Verifique a próxima imagem)

  5. transforme a imagem em um quadrado perfeito

    por exemplo, imagem:

    digite a descrição da imagem aqui

  6. Executar OCR (para o qual usei o método que tenho fornecido em Reconhecimento de dígito simples ção OCR em OpenCV-Python )

E o método funcionou bem.

Problema:

Confira esta imagem.

Executar o passo 4 nesta imagem dá o resultado abaixo:

digite a descrição da imagem aqui

A linha vermelha desenhada é o contorno original que é o verdadeiro contorno do limite do sudoku.

A linha verde desenhada é o contorno aproximado que será o contorno da imagem distorcida.

O que é claro, há diferença entre a linha verde e a linha vermelha na borda superior do sudoku. Portanto, ao deformar, não estou obtendo o limite original do Sudoku.

Minha pergunta:

Como posso deformar a imagem no limite correto de o Sudoku, ou seja, a linha vermelha OU como posso remover a diferença entre a linha vermelha e a linha verde? Existe algum método para isso no OpenCV?