我想根據輪廓的凹入部分用白色圓圈分離無噪聲的 1 位(黑白)影像。請參考下圖。
這是要分離的白色物體:

目標結果是:

這是我使用分水嶺演算法的實作:

上面的結果不是我想要的。如果分離出來的物體大小相近,我的演算法沒問題,但是如果大小差異很大,就會出現如上圖所示的問題。我想實作一個opencv演算法,可以像第二張圖片那樣分割一個區域。
但是,輸入的照片不一定是一個完美的圓形。它可以是橢圓形的,如下圖所示:

或者它可以被壓扁:

但是,無論如何,我想根據輪廓的凹入部分將其分開。
我認為它可以通過使用 distanceTransform 函式很好地實作,但我不知道如何處理它。請讓我知道參考哪種方式。謝謝你。
uj5u.com熱心網友回復:
如果你想找到最小的開口,你可以使用基于中間軸的方法。
偽代碼:
compute contours of bitmap
compute medial-axis of bitmap
for each point on medial-axis:
get minimal distance d from medial axis algorithm
for each local minimum of distance d:
get two points on bitmap contours with minimal distance that are at least d apart from each other
use these points for deviding line
如果您需要一個有效的實作python,請告訴我。我會使用skimage庫。對于其他語言,您可能必須自己實作中間軸。但這應該沒什么大不了的。
uj5u.com熱心網友回復:
這是一個應該給你一個好的開始的演算法。
- 計算所有輪廓。
- 對于每個輪廓計算凸度缺陷。如果沒有缺陷,則輪廓是一個孤立的圓,您可以將其分割出來。
- 在處理完所有孤立的圓之后,您可以通過計算凸度缺陷來計算剩余的輪廓:每個輪廓的圓數 N 是凸度缺陷數除以 2。
- 使用聚類演算法(https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html考慮到你擁有的形狀應該做得很好)并使用 N 作為數量來聚類“白”點要找到的集群。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/510777.html
上一篇:檢測兩個相同尺寸(184、184)影像之間旋轉角度的最簡單方法是什么?
下一篇:應用灰度時視頻損壞
