Come rimuovere i difetti di convessità in un quadrato Sudoku?

| | | | | | | | | |

Stavo facendo un progetto divertente: risolvere un Sudoku da un'immagine di input usando OpenCV (come negli occhiali di Google, ecc.). E ho completato il compito, ma alla fine ho riscontrato un piccolo problema per il quale sono venuto qui.

Ho fatto la programmazione utilizzando l'API Python di OpenCV 2.3.1.

Sotto è quello che ho fatto :

  1. Leggi l'immagine
  2. Trova i contorni
  3. Seleziona quello con area massima, (e anche in qualche modo equivalente al quadrato) .
  4. Trova i punti d'angolo.

    ad esempio sotto:

    inserisci qui la descrizione dell'immagine

    (Nota qui che la linea verde coincide correttamente con il vero confine del Sudoku, quindi il Sudoku può essere correttamente deformato. Controlla l'immagine successiva)

  5. trasforma l'immagine in un quadrato perfetto

    es. immagine:

    inserisci qui la descrizione dell'immagine

  6. Esegui l'OCR (per il quale ho usato il metodo che ho fornito in Riconoscimento di cifre semplici ition OCR in OpenCV-Python )

E il metodo ha funzionato bene.

Problema:

Guarda questa immagine.

Eseguendo il passaggio 4 su questa immagine si ottiene il risultato seguente:

inserisci qui la descrizione dell'immagine

La linea rossa disegnata è il contorno originale che è il vero contorno del confine del sudoku.

La linea verde disegnata è il contorno approssimativo che sarà il contorno dell'immagine deformata.

Che ovviamente c'è differenza tra la linea verde e la linea rossa sul bordo superiore del sudoku. Quindi, durante la deformazione, non ottengo il confine originale del Sudoku.

La mia domanda:

Come posso deformare l'immagine sul confine corretto di il Sudoku, ovvero la linea rossa OPPURE come posso eliminare la differenza tra linea rossa e linea verde? C'è un metodo per questo in OpenCV?