1
我想弄清楚實現圖像擴張和侵蝕二進制圖像的有效方法。據我所知,用簡單的方式將是:執行圖像擴張和侵蝕
- 循環通過圖像
- 如果像素是1
- 循環通過鄰里基於所述結構元素的 高度和寬度
- (擴張)將圖像中的每個像素用 中相應位置的值替換(腐蝕)檢查是否所有的鄰域都等於SE,如果全部保留 像素,則刪除中心
所以這意味着對於每個像素我必須遍歷SE以及使之成爲一個O(N 中號 W * H)。
有沒有更好的方法來做到這一點?
我想弄清楚實現圖像擴張和侵蝕二進制圖像的有效方法。據我所知,用簡單的方式將是:執行圖像擴張和侵蝕
所以這意味着對於每個像素我必須遍歷SE以及使之成爲一個O(N 中號 W * H)。
有沒有更好的方法來做到這一點?
是的,有!
首先,您想要將結構元素分解爲段(一個由垂直和水平段組成的正方形)。然後你只對分段進行侵蝕/擴大,這已經降低了複雜性。
現在的侵蝕/擴張部分,你有不同的解決方案:
對於結構化磁盤類型的元素,沒有什麼「快速」,你必須使用基本算法。對於六角形結構元素,可以逐行工作,但不能並行化。
如果您的圖片背景較大,我認爲我的做法是從非重疊鄰域開始,因爲只有在存在「0」像素的情況下才會發生擴張,然後只有在檢測到「0」像素時才移動到重疊鄰域在附近。實際上,侵蝕/擴張過濾器比大多數其他圖像處理過濾器快得多,因爲它們不需要任何數學運算(例如模糊處理)。 – eigenchris 2014-12-03 19:48:11
可以做。我也讀過有關轉移和使用邏輯運算的知識,但我從未發現任何詳細的內容。我的理解是,擴大可以通過複製和移動圖像的方向基於SE和執行AND與所有圖像 – tigeradol 2014-12-04 13:05:25
我剛剛注意到在這裏類似的問題:http://stackoverflow.com/questions/21854594/有效實施侵蝕擴張。 一個簡單的方法是執行一維垂直擴張,然後是一維水平擴張,但一個答案描述了一個更有效的解決方案。 – eigenchris 2014-12-04 15:11:55