python区域增长算法_区域增长算法
嘿大家好。我真的很難搞清楚這個邏輯,希望你能幫我。在我繼續之前,我只想告訴你,我是業余程序員,也是一個初學者,沒有任何形式的正式計算機科學培訓,所以請容忍我。:D另外,我使用的是Python,但我可以使用Java或類似的工具。
不管怎樣,我希望實現一個地區的增長,在一個初步的Drawbot使用。
這里有一篇關于區域增長的文章:http://en.wikipedia.org/wiki/Region_growing
按照我的設想,繪圖所基于的圖像將滿足以下條件:在任意顏色深度下,圖像大小最多為3x3英寸
圖像將是白色背景上的黑色連續形狀
形狀可以位于背景上的任何位置。
我已經考慮過這個問題的下列解決辦法。雖然有些工作在一定程度上,但它們在性能或可行性上都有一些相當大的缺陷(至少在我看來是不可行的)。此外,由于這是一個Drawbot,這需要用一條連續的線來完成。但這并不意味著我不能回溯,它只是消除了多個起點(種子)的可能性。
考慮的方法:
隨機行走:
我的第一直覺是用隨機行走來解決這個問題。我想,實現這一點的隨機行走程序應該是這樣的:
偽python。。。Cells To Visit = Number of Black Cells
Cells Visited = 0
MarkColor = red
While Cells Visited < Cells To Visit:
if currentcell is black:
Mark Current Cell As Visited #change pixel to red
Cells Visited +=1
neighbors = Get_Adjacent_Cells() #returns cells either black or red
next cell = random.choose(neighbors)
currentCell = next cell
雖然我認為這是可行的,但在我看來,這是非常無效的,并不能保證良好的結果,但為了實際完成一些事情,我可能最終嘗試這個。。。我在偽代碼中的邏輯是不是還模模糊糊地正確?
掃描模式:
在我看來,這個方法是最容易實現的。我的想法是我可以在形狀的一個極端選擇一個起點(例如,最左下點)。從那里開始,它會向右移動,只在x軸上移動,直到它碰到一個白色像素。從這里開始,它將在y軸上向上移動一個像素,然后在x軸上向左移動,直到達到一個白色像素。如果正上方的像素碰巧是白色,則在x軸上回溯,直到在其上方找到一個黑色像素。
經進一步檢驗,這種方法有一些主要缺點。
當面對這樣的形狀時:
結果如下:
即使我告訴它過一段時間后開始清掃,中腿仍然會被忽略。
4/8連通鄰域:
在我看來,這種方法是最強大和最有效的,但在這一點上,我無法完全搞清楚,我也無法考慮如何在不可能留下一些被忽視的領域的情況下實現它
在每一個單元中,我都會查看相鄰的黑單元,設計一些方法來排列我應該首先訪問哪個單元,訪問所有的黑單元,然后重復這個過程,直到所有的單元都被覆蓋。
我在這里看到的問題首先是處理實現這一點所必需的數據結構,而且僅僅是找出其背后的邏輯。
這些是我能想到的最好的解決辦法。謝謝你花時間讀這篇文章,我意識到它很長,但我想我應該盡可能地把它說清楚。任何和所有的建議將非常感謝。。。謝謝!
編輯:
我也研究了迷宮生成和求解算法,但不知道如何在這里實現。我對迷宮求解算法的理解是,它們依賴于迷宮通道的寬度相等。我當然可能錯了。
總結
以上是生活随笔為你收集整理的python区域增长算法_区域增长算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 消息称三星 Galaxy S24 Ult
- 下一篇: java接口课程_用java定义一个接口