对于迷宫图像的信息提取以及A*路径规划

笔者目前需要对获得的图像进行处理,提取一些关于通道的信息,并且对于通道进行一个路径规划,规划一个最优路径,但是在使用A*路径规划的过程中出行一些问题,希望有大佬能解决问题。

笔者在对于实际的环境进行信息提取之前首先利用CAD绘图绘制大致,实际会获取的通道的图像进行模拟。通道的图像如图:

对于迷宫图像的信息提取以及A*路径规划

笔者设置的起点和终点在两个圆上,因此,要提取两个圆,这里需要用到opencv库中的Hough圆检测,此处是对于起点和终点的位置信息的提取。

import cv2
import numpy as np
#读取原图像
img = cv2.imread('3.jpg')
#将图像转换成灰度图像
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#滤波
ret, thresh = cv2.threshold(gray_img,127,255,cv2.THRESH_BINARY_INV)

#Hough圆检测(Hough Circle Transform)
gray_img = cv2.medianBlur(gray_img, 3)
cv2.imshow('1', gray_img)
cv2.waitKey()
circles = cv2.HoughCircles(gray_img, method=cv2.HOUGH_GRADIENT, dp=1, minDist=20, param1=100, param2=20, minRadius=10, maxRadius=200)
circles = np.uint16(np.around(circles))#提取为二维
for i in circles[0, :]:
    cv2.circle(img, (i[0], i[1]), i[2], (255, 0, 0), 2)#画圆
    cv2.circle(img, (i[0], i[1]), 2, (255, 0, 0), 10)#画圆心
if circles[0,0,0] < circles[0, 1, 0]:
    start = circles[0, 0, 0:2]
    end = circles[0, 1, 0:2]
else:
    start = circles[0, 1, 0:2]
    end = circles[0, 0, 0:2]
print('start:', start)
print('end:', end)
cv2.imshow('2',img)
cv2.waitKey()

对于A*算法需要获取路径的起点,终点以及周围的障碍信息,我们已经获取了起点和终点的信息,在笔者的图中由于黄色部分是通道其余部分就是障碍因此需要设置为1,

import cv2
import numpy as np

img = cv2.imread("3.jpg")
#&#x5C06;&#x56FE;&#x50CF;&#x8F6C;&#x6362;&#x6210;&#x7070;&#x5EA6;&#x56FE;&#x50CF;
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#&#x6EE4;&#x6CE2;
ret, thresh = cv2.threshold(gray_img,127,255,cv2.THRESH_BINARY_INV)
map = thresh/255
cv2.imshow("1", thresh)
cv2.waitKey()

有了起点信息,终点信息以及障碍信息,我们就可以进行A*的路径规划

A* 算法的实现的原理如下

1.首先把起始位置点加入到一个称为"open List"的列表, 在寻路的过程中,目前,我们可以认为open List这个列表 会存放许多待测试的点,这些点是通往目标点的关键, 以后会逐渐往里面添加更多的测试点,同时,为了效率考虑, 通常这个列表是个已经排序的列表。
2.如果open List列表不为空,则重复以下工作:
(1)找出open List中通往目标点代价最小的点作为当前点;
(2)把当前点放入一个称为close List的列表;
(3)对当前点周围的4个点每个进行处理(这里是限制了斜向的移动),如果该点是可以通过并且该点不在close List列表中,则处理如下;
(4)如果该点正好是目标点,则把当前点作为该点的父节点,并退出循环,设置已经找到路径标记;
(5)如果该点也不在open List中,则计算该节点到目标节点的代价,把当前点作为该点的父节点,并把该节点添加到open List中;
(6)如果该点已经在open List中了,则比较该点和当前点通往目标点的代价, 如果当前点的代价更小,则把当前点作为该点的父节点, 同时,重新计算该点通往目标点的代价,并把open List重新排序;
3.完成以上循环后,如果已经找到路径,则从目标点开始,依次查找每个节点的父节点,直到找到开始点,这样就形成了一条路径。

具体代码看我的github

https://github.com/zicaidanhua/Astar

A*算法,能够规划从起点到终点的路径,但是,最后获得的效果并不理想。

对于迷宫图像的信息提取以及A*路径规划

希望有大佬能指出问题

Original: https://blog.csdn.net/qq_44752293/article/details/126288626
Author: 紫菜蛋花Tang
Title: 对于迷宫图像的信息提取以及A*路径规划

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/702988/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球