2013-04-26 102 views
2

我正在開發一個項目,我必須在由凸輪提供的圖像中自動分割汽車的不同部分(即門,前燈等)。OpenCV不同照明的背景減法

在第一步我想刪除背景,所以算法不會找到它不應該的地方。

我也有剛剛背景的圖像,但光照是非常不同的,由於曝光時間,汽車的光線反射等

我試圖通過簡單的減法擺脫BG的,不幸的是,由於光照條件不同,這並不是很有幫助。

因此,接下來我應用了直方圖均衡化,但這也沒有多大幫助。

我該如何擺脫這種不同的點燃場景中的背景?有沒有一種OpenCV方法可以用於這兩個圖像?

感謝您的閱讀。

回答

3

OpenCV的背景扣除三種不同的方法:

BackgroundSubtractorGMG bs_gmg; 
BackgroundSubtractorMOG bs_mog; 
BackgroundSubtractorMOG2 bs_mog2; 

Mat foreground_gmg; 
bs_gmg (image, foreground_gmg, -1.0); 
Mat foreground_mog; 
bs_mog (image, foreground_mog, -1.0); 
Mat foreground_mog2; 
bs_mog2 (image, foreground_mog2, -1.0); 

您可以瞭解它們,並使用最適合你的人。

+0

嗨Safir,謝謝你的輸入。我是否認爲這隻適用於多幅圖像,而不適用於僅有2幅(背景和背景+前景)的作品?我發現的例子依賴於視頻流,即多個輸入圖像。 – 2013-04-30 07:55:16

+0

背景具有視頻流意義。否則,你如何知道是否有背景。在這些算法中,他們知道什麼是移動,因此是前景,什麼不移動,因此是背景。如果你有一個靜態背景,我認爲減法你必須能夠從任意圖像中刪除它。 – Safir 2013-04-30 09:23:40

0

你沒有提到你使用了什麼顏色空間。我假設RGB?有些顏色空間類型默認處理亮度參數,因此您可以使用此類信息應用背景減法算法。看看http://en.wikipedia.org/wiki/HSV_color_space

+0

我目前使用RGB顏色空間(BGR在我收集的opencv中)。我會嘗試轉換到另一個空間,看看這是否會有所幫助,謝謝阿迪。 – 2013-04-30 07:56:30

0

嗯......只是說,我不確定這是否會工作,但你可以應用基於更大面積的減法(如內核),然後將該直方圖變異。 例如可以說我們的內核補丁被設置爲30x30像素,並且我們將這個應用於來自背景圖像的像素p(x,y)和來自測試圖像的q(x,y)(p和q是每個圖像上相同的相應位置)。因此,我們有一個30x30的減影圖像。

現在,嘗試使用這個相減的修補程序產品,如直方圖。零直方圖意味着相同的比較補丁。 「幾乎平坦」的直方圖可能意味着相同。否則,將其視爲前景。

+0

你會不會有這種方法的代碼?不幸的是,我在OpenCV/C++中並沒有那麼先進。 – 2013-04-30 07:58:08

+0

搜索「訪問cvMat元素」,「opencv直方圖比較」和「opencv filter2d」。 – William 2013-04-30 09:21:40

0

我的經驗表明,照明條件可以有這麼多的變化,兩個圖像是不夠的。您開始使用基於像素的方法,對兩幅圖像進行簡單的逐像素減法,但照度變化會使顏色顯得非常不同,即使在HSV空間中也是如此。這是光圈問題的一個例子,這是計算機視覺中最基本的困難之一。簡而言之,我們需要更多的上下文。因此,您試圖通過估計和校正全局照明參數來獲得上下文,並發現這還不夠,因爲圖像的不同區域可能具有不同的反射屬性,或者與光源處於不同的角度。如果您繼續採用這種方法,下一步就是根據外觀將圖像分割成不同的區域,然後分別平均每個區域的直方圖。例如嘗試​​。

還有一個完整的方法。背景實際上可能不是這裏提供的最具信息性的提示,爲什麼要從它開始?您可以轉而使用Viola-Jones approach,然後從那裏開始工作。一旦你得到它的工作,添加來自背景的信息,以提高質量。