2017-03-22 30 views
2

在bw圖像上檢測到物體的形狀。該物體呈黑色連續形狀,背景爲白色。 我們使用PCA(http://docs.opencv.org/3.1.0/d1/dee/tutorial_introduction_to_pca.html)獲取對象方向並對齊對象。目前,形狀本身(輪廓上的點)是opencv PCA實現的輸入。這通常工作得很好。但時不時在物體邊緣會有小的污垢,導致形狀在污垢周圍傳播。這會導致更多的點和更多的重量在一邊,略微轉動的對象。OpenCV - BW圖像上的PCA分析 - 區域與形狀 - 是否已有實現?

想法:我們使用物體的區域作爲PCA分析的輸入,而不是輪廓。問題在那裏,檢查所有點是否在輪廓內,然後將它們用於PCA會降低應用程序的速度。這部分將會慢52352倍。

新方法:我們在圖像中隨機抽取點,檢查它們是否在形狀內,如果是,請將它們用於我們的PCA。我們必須看看能否從這種方法中獲得所需的一致質量。

opencv中是否已經有類似的實現使用區域而不是形狀? 另一種方法是將網格放置在對象上,並使用對象內部的網格點作爲PCA。 有沒有類似的東西可以使用,或者是否需要快速實現類似的東西?

尋找物體周圍的直線不是一種選擇。

+1

您可以共享任何示例圖像? –

+1

代碼的相關部分 – Miki

+2

獲取輪廓的傅里葉描述符,將頻率高於選定閾值的頻率分量設置爲零,然後進行傅里葉逆變換。這樣你可以得到一個平滑的輪廓版本,你可以應用PCA。看[這裏](http://demonstrations.wolfram.com/FourierDescriptors/)一個很好的演示。 – dhanushka

回答

2

鑑於我們已經收到您的問題(發佈圖像將有很大的幫助),你似乎不知道噪聲的概率密度函數的信息非常有限,最好的辦法是考慮噪聲是高斯。因此,按照你的直覺,我建議的方法是在對象內部計算PCA並採用少數幾個(我的意思是統計上相關但不提高計算時間)。

在迭代循環中重複此過程,並將從PCA應用程序獲得的旋轉角度存儲到對象形狀的某處。

停止一旦你有足夠的點,計算旋轉角度的平均值:這是一個正確的角度估計。計算標準偏差以獲得估算質量的度量。通過「足夠的分數」,根據中心極限定理,可以認爲〜30分通常被認爲是「充分」的代表潛在的人口。

如果您願意,您可以通過多種方式改進此方法,例如在收集足夠的點後對真實角度進行可靠估計。這一切都取決於你手邊的數據......以我的建議爲出發點。

1

您可以更改的參數很少,可以改進您的系統。

首先是用來對圖像進行二值化的閾值。我不知道你的應用程序是關於什麼的,但你可以使用其他顏色系統,或者通過cromacity規範你的圖像,然後應用新的閾值。

其他方面是排除具有更大或更小面積的形狀(輪廓),您所期望的。

要合起來,您可以在檢測輪廓之前使用模糊濾鏡。

相關問題