Zapis zdjęcia labiryntu jako dwuwymiarowej tablicy 0/1

Zapis zdjęcia labiryntu jako dwuwymiarowej tablicy 0/1
adammo94
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 40
0

Cześć, piszę skrypt, który zamienia labirynt na dwuwymiarową tablicę zawierającą 0 lub 1. Co ważne labirynt ma postać "siatki": nakładając siatkę na labirynt ściany będą zawarte w polach, a nie na krawędziach pól. Nie jest tak, że ma cieniutkie ściany i szerokie korytarze.
Mój skrypt:

  1. Otwiera plik zdjęciowy
  2. szuka kartki (opencv)
  3. obcina jej marginesy
  4. warpuje labirynt
  5. proguje obraz
  6. a następnie (przynajmniej według mojej koncepcji) liczy sobie ile jest obok siebie białych pikseli w każdym rzędzie na obrazie i wybiera ich najmniejszą ilość (w pierwszym i ostatnim rzędzie siatki jest tylko jedno białe puste pole wejścia lub wyjścia z labiryntu, a reszta to ściany) na tej podstawie oblicza jaką szerokość ma pojedyncze pole, a zatem i wysokość (pola są kwadratowe),
  7. następnie dzieli cały obraz na takie pola i sprawdza średnią wartość tego pola (bardziej czarna czy bardziej biała), a następnie tworzy tablicę dwuwymiarową i wpisuje na tej podstawie 1 lub 0.

Niestety, problem jest taki, że zdjęcie kartki nigdy nie jest równe (rogi są nieco bardziej wystające, a boki nieco bardziej wklęsłe, przez co warpowanie zdjęcia, a następnie zrobienie kroku 6 i 7 nie zawsze działa i np. labirynt ma inny wymiar siatki niż w rzeczywistości np. 10x12 zamiast 10x13, czy ktoś miałby jakiś pomysł na bardziej niezawodny sposób na przełożenie takiego labiryntu na tablicę? Za wszelkie wskazówki będę wdzięczny

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6968
1
adammo94 napisał(a):

czy ktoś miałby jakiś pomysł na bardziej niezawodny sposób na przełożenie takiego labiryntu na tablicę? Za wszelkie wskazówki będę wdzięczny

karta odpowiedzi

Widzisz te kwadraciki w rogach?
Jakbyś miał labirynt otoczony takimi markerami, to mógłbyś na tej podstawie skorygować perspektywę.

Kiedy sprawdzasz, czy kwadracik jest zamalowany, sprawdzaj średnią koloru całego obszaru. Jeśli średnia przekracza jakiś tam próg szarości, to znaczy, że kwadrat jest zamalowany.

Wymiary siatki najlepiej jakby były stałe...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.