2011-12-29 28 views
5

我正試圖爲C++找到一個易於使用的視覺庫。這裏是我的情況:我有接口的計算機的攝像頭(爲簡單起見,雖然,我們就可以假設計算機上存在該圖像文件),這就是圖像將非常類似:C++ OpenCV視覺庫是否適合這種圖像分割的情況?

enter image description here

這個想法是垂直堆疊的三個物體將具有高度對比的顏色。我需要確定物體的位置,因此視覺庫將不得不找到物體的邊緣或確定物體的中心。

我以前從未使用過視覺系統,所以我一直在做一些研究,看起來OpenCV很受歡迎。用於我的應用程序會很容易,還是有另一個庫可以用來輕鬆確定對象的位置?

感謝您的諮詢!

回答

4

對於這個特定的圖像,你不需要在全綵色空間中工作,而是可以在單獨的強度(HSV的「V」的一部分 - 「值」,意思強度)工作。

enter image description here

無論您使用的價值空間或色彩空間,佩內洛普提到,將取決於你生產你的真實物體的自然的圖像。對於一般情況,您可能需要使用色調和值(強度)的組合來正確分割圖像。而不是在色相值向量空間中工作,分別在H和V圖像平面中工作並結合結果更爲直接。 (在3D矢量空間中的分割當然是可能的,但對於這個項目可能會不必要的複雜。)

OpenCV中的分水嶺算法可以很好地滿足您的需求。關於大津的方法謹慎 http://www.seas.upenn.edu/~bensapp/opencvdocs/ref/opencvref_cv.htm

一字:它的優良用於分離兩種模式時的強度值(或色調值)的直方圖是雙峯分佈,但對於自然圖像也並不常見有真正雙峯分佈。如果背景和/或前景物體的強度和/或色調從物體的一側到另一側發生變化,則大津表現不佳。

大津當然可以擴展爲多種模式,如數字圖像處理由岡薩雷斯和伍茲和其他介紹教科書的主題。但是,即使使用Otsu一次分離一對模式,背景漸變也會導致問題。

您還需要確保如果您的相機鏡頭放大或縮小,您仍然可以找到相同的二值化閾值。基本的Otsu技術使用圖像直方圖中的所有像素。這意味着您可以對圖像中的所有像素進行加擾,以產生與原始圖像具有相同圖像直方圖的純噪聲,並且Otsu的方法會生成相同的閾值。

一個常見的技巧是依靠邊緣附近的像素。在你的例子中,我們可以認爲圖像是一個尖銳邊緣,銳角和(希望)統一HSV值的區域。在邊緣附近採樣像素可以通過幾種方式完成,包括:

  1. 找到強大的邊緣點(使用Canny或一些更簡單的技術)。沿邊緣梯度的方向,並且在從邊緣點距離+/- d,採樣的(相對)前景和(相對)的背景的灰度等級。距離D應該比所討論的物體的尺寸小得多。
  2. 尋找強大的優勢點。邊沿點自己作爲可能所需的閾值的估計使用灰度級。一個在object1和對象2之間的邊緣,而另一個在對象2和object3之間的邊緣:在你的榜樣,你就會有兩個強峯邊了。

由於您的物體有角落,您可以使用它們來幫助識別適合採樣的物體邊界和/或邊緣像素。

如果你有標稱的矩形對象,你也可以使用霍夫邊緣或RANSAC邊緣算法來識別圖像中的線條,找到角落,等路口

所有這一切說,幾乎涉及對象的任何自然的圖像相互堆疊你會遇到許多複雜的頂部:

  • 顏色和強度梯度跨越名義上的對象

    • 陰影如果對象是由光學系統

    一個不同的距離如果你肯定知道有多少對象不同清晰度的色彩一致

  • 邊緣s是存在的,你可以嘗試一個K手段技術。 http://aishack.in/tutorials/knearest-neighbors-in-opencv/

    對於更復雜的分割任務,例如當對象的數量是不知道,你可以使用均值漂移技術,但我第一次建議嘗試簡單的技術。

    第一步和最簡單的解決方法是使用適當的照明。要減少反射和陰影,請使用漫反射照明。對於許多應用,最接近理想的漫射照明是「陰天」照明: http://www.microscan.com/en-us/products/nerlite-machine-vision-lighting/cdi-illuminators.aspx

    更簡單地說,你可以嘗試一個或多個「反彈」燈,如在攝影工作室使用。 http://www.photography.com/articles/taking-photos/bounce-lighting/

  • 7

    OpenCV定義了一個易於使用的視覺庫。我已經在很多計算機視覺項目中使用過它,對我而言,使用它非常直觀。

    我假設對象的顏色是未知的(如果沒有,here's是一個很好的教程,如何在OpenCV中找到特定的顏色)。

    下面是解決你的問題,一個粗略的想法(我沿着什麼樣的操作是容易的OpenCV實現線路思考):

    • 將圖像轉換成HSV色彩空間 - 顏色應該有很在此空間中的不同色調值,如果它們具有高的對比度,因此,如果它使用p大津的方法(閾值將被自動確定)

    • 僅使用色調圖像

    • 閾畫面剔除中間物體(例如在背景上有2個連接的組件)完成分割。如果對象是方形的,你可以使用findContours或甚至Hough變換。

    • 如果它只挑選出來的物體,你可以再次以相同的方式找到它的輪廓,設置感興趣的區域(你正在處理的圖像的一部分),所以它只是在輪廓內部,部分圖像再次找到另外兩個對象之間的邊界。最後,只需在單獨的圖像上疊加輪廓即可。

    • 最棘手的情況是,如果它的閾值,以便您只能找到最內層的對象。乍一看,你不能區分上面的情況,但第二個(內部)閾值不會給出任何相關結果。在這種情況下,您可以在找到的閾值區域之外(第二個對象的Hue)選擇Hue,並將剛剛找到的最內層對象的Hue設置爲該Hue。現在,您再次獲得2色調圖片,您可以在外部兩個對象之間進行閾值和查找輪廓。最後,就像在前面的情況一樣,疊加找到的輪廓。

    +0

    「顏色在這個空間應該有非常不同的色調值」有用的技巧,我會記住的。 – SigTerm 2011-12-30 16:16:46

    相關問題