Jak usunąć defekty wypukłości w kwadracie Sudoku?

| | | | | | | | | |

Robiłem fajny projekt: rozwiązywanie Sudoku z obrazu wejściowego za pomocą OpenCV (jak w goglach Google itp.). I zadanie wykonałem, ale w końcu znalazłem mały problem, po który tu trafiłem.

Programowałem za pomocą Pythonowego API OpenCV 2.3.1.

Poniżej to, co zrobiłem :

  1. Przeczytaj obraz
  2. Znajdź kontury
  3. Wybierz ten z maksymalnym obszarem (i nieco równoważny kwadratowi) .
  4. Znajdź punkty narożne.

    Np. podane poniżej:

    wprowadź opis obrazu tutaj

    (Zauważ, że zielona linia prawidłowo pokrywa się z prawdziwą granicą Sudoku, więc Sudoku może być poprawnie zniekształcone. Sprawdź następny obraz)

  5. zamień obraz do idealnego kwadratu

    np. obraz:

    tu wpisz opis obrazu

  6. Wykonaj OCR (dla którego użyłem metody, którą mam podane w Proste Rozpoznawanie Cyfr OCR w OpenCV-Pythonie )

A metoda zadziałała dobrze.

Problem:

Sprawdź ten obraz.

Wykonanie kroku 4 na tym obrazie daje następujący wynik:

tu wpisz opis obrazka

Narysowana czerwona linia jest oryginalnym konturem, który jest prawdziwym zarysem granicy sudoku.

Narysowana zielona linia jest przybliżonym konturem, który zostanie zarys zniekształconego obrazu.

Która oczywiście jest różnica między zieloną a czerwoną linią na górnej krawędzi sudoku. Tak więc podczas wypaczania nie otrzymuję oryginalnej granicy Sudoku.

Moje pytanie:

Jak mogę zniekształcić obraz na prawidłowej granicy Sudoku, czyli czerwona linia LUB jak usunąć różnicę między czerwoną a zieloną linią? Czy jest na to jakaś metoda w OpenCV?