Commit 73a983a2 authored by Lucas Chatelain's avatar Lucas Chatelain
Browse files

Ajout de la fonction de simplification de la liste de point (+ nouveau labyrinthe de test)

parent db8a046e
......@@ -9,6 +9,7 @@ from vertex import *
from graph import *
import numpy as np
import cv2
import math as m
def solve_maze(img, ball_position, finish_position):
......@@ -50,10 +51,43 @@ def solve_maze(img, ball_position, finish_position):
return graph.path
# #%% Test
def shortening_path(path, img, blockSize = 3, apertureSize = 3, k=0.04, dist_min = 5):
#On a besoin d'une image représentant notre chemin pour pouvoir détecter les points anguleux
way = np.zeros(img.shape,dtype=np.uint8)
for vert in path:
way[vert.x][vert.y]=255
#On applique cornerHarris pour détecter les angles. blockSize est la taille du voisinage considéré
way_dst = cv2.cornerHarris(way, blockSize, apertureSize, k)
#Création et remplissage de notre nouvelle liste de points
new_path = [[path[0].x,path[0].y]]
for n in range(2,len(path)-2):
i,j=path[n].x,path[n].y #Coordonnées du point considéré
a,b=path[n-1].x,path[n-1].y #Coordonnées du point précédent dans le chemin
c,d=path[n+1].x,path[n+1].y #Coordonnées du point suivant dans le chemin
#On ajoute le point à la liste si sa valeur retournée par harris est supérieure à celle de ses voisins
if(way_dst[i][j]>way_dst[a][b] and way_dst[i][j]>way_dst[c][d]):
x,y = new_path[-1][0],new_path[-1][1]
dist = m.sqrt((x-i)**2 + (y-j)**2)
if (dist > dist_min):
new_path.append([i,j])
new_path.append([path[-1].x,path[-1].y])
return new_path
#%% Test
# import matplotlib.pyplot as plt
# img = cv2.imread("labyTest.jpg")
# img = cv2.imread("../Resolution_laby/testLaby_bin.jpg")
# img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# l,c = img.shape
# img = cv2.resize(img,(c//20,l//20))
......@@ -62,6 +96,13 @@ def solve_maze(img, ball_position, finish_position):
# for i in range(len(path)):
# img[path[i].x, path[i].y] = 150
# #print(str(path[i].x) + ";" + str(path[i].y))
# print(str(path[i].x) + ";" + str(path[i].y))
# plt.figure(1), plt.imshow(img)
# path_final = shortening_path(path, img)
# print(path_final)
# for i in range(len(path_final)):
# img[path_final[i][0], path_final[i][1]] = 0
# plt.figure(2), plt.imshow(img)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment