我給出的距離變換(如下圖),我需要編寫一個發現的最短路徑從A點(140,200)去B點(725,1095),同時確保我的程序是從任何障礙至少十個像素遠找到最短路徑一定距離變換的圖像
(以上圖像的距離變換map)
這是我迄今所做的:
我從最初的時候開始,評估周圍每個點的灰度強度。 (8個相鄰點即是)
然後我移動到點與8個相鄰的點的最高灰度強度。
然後我重複這個過程,但我看到一些隨機的轉彎,而不是最短路徑。
請你幫我出
碼是什麼我迄今所做的:
def find_max_neigh_location(np,img):
maxi = 0
x0=0
y0=0
for i in range(len(np)):
if img[np[i][0]][np[i][1]][0] >maxi:
maxi = img[np[i][0]][np[i][1]][0]
x0 = np[i][0]
y0 = np[i][1]
return x0,y0
------------------ -----------------------------------------------
def check_if_extremes(x,y):
if(x==1099 and y==1174):return 1
elif(y==1174 and x!=1099):return 2
elif(x==1099 and y!=1174):return 3
else:return 0
---------------------------------------------- ----------
def find_highest_neighbour(img,x,y,visted_points):
val = check_if_extremes(x,y)
if val==1:
neigh_points = [(x-1,y),(x-1,y-1),(x,y-1)]
np = list(set(neigh_points)-set(visited_points))
x0,y0 = find_max_neigh_location(np,img)
elif val==2:
neigh_points = [(x-1,y),(x-1,y-1),(x,y-1),(x+1,y-1),(x+1,y)]
np = list(set(neigh_points)-set(visited_points))
x0,y0 = find_max_neigh_location(np,img)
elif val==3:
neigh_points = [(x-1,y),(x-1,y-1),(x,y-1),(x,y+1),(x-1,y+1)]
np = list(set(neigh_points)-set(visited_points))
x0,y0 = find_max_neigh_location(np,img)
elif val==0:
neigh_points = [(x-1,y),(x-1,y-1),(x,y-1),(x,y+1),(x+1,y),(x+1,y+1),(x,y+1),(x-1,y+1)]
np = list(set(neigh_points)-set(visited_points))
x0,y0 = find_max_neigh_location(np,img)
for pt in neigh_points:
visited_points.append(pt)
return x0,y0,visited_points
--------------------------------------------- ------------
def check_if_neighbour_is_final_pt(img,x,y):
l = [(x-1,y), (x+1,y),(x,y-1),(x,y+1),(x-1,y-1),(x+1,y+1),(x-1,y+1),(x+1,y-1)]
if (725,1095) in l:
return True
else:
return False
------------------------------- -------------------------------
x=140
y=200
pos=[]
count = 0
visited_points = [(x,y)]
keyword = True
while keyword:
val = check_if_neighbour_is_final_pt(img,x,y)
if val == True:
keyword = False
if val == False:
count=count+1
x,y,visited_points = find_highest_neighbour(img,x,y,visited_points)
img[x][y] = [255,0,0]
cv2.imwrite("img\distance_transform_result__"+str(count)+".png",img)
這不是一個免費的作業服務。嘗試自己解決問題。你可能會在路上尋求幫助,但是你可能不會要求幫助,甚至你已經開始考慮這個問題......來吧。 – Piglet
嘿,我只是想指出一個方向。我發佈了整個問題的完整性。我希望你能看到過去並幫助我。 – kaysri
@Piglet 我要說出我迄今所做的(雖然我不知道這是否是正確的做法): 我一開始是在初始點和評估周圍的每一個點的灰度強度。 (8個相鄰點即是) 然後我移動到點與8個相鄰的點的最高灰度強度。 然後我重複了這個過程,但是我得到了隨機輪迴,而不是最短路徑。 請幫我:) – kaysri