2017-04-18 118 views
9

所以,即時通訊使用opencv捕獲文件,掃描並裁剪它。當房間裏沒有照明時,它完美地工作。當房間裏有一些燈光,桌子上有眩光並且文檔靠近它時,它也會將眩光視爲矩形的一部分。從照片中刪除眩光opencv

如何從照片中去除眩光?

下面是一個使用來獲得我想要的圖像的代碼IM:

Mat &image = *(Mat *) matAddrRgba; 
    Rect bounding_rect; 

    Mat thr(image.rows, image.cols, CV_8UC1); 
    cvtColor(image, thr, CV_BGR2GRAY); //Convert to gray 
    threshold(thr, thr, 150, 255, THRESH_BINARY + THRESH_OTSU); //Threshold the gray 

    vector<vector<Point> > contours; // Vector for storing contour 
    vector<Vec4i> hierarchy; 
    findContours(thr, contours, hierarchy, CV_RETR_CCOMP, 
       CV_CHAIN_APPROX_SIMPLE); // Find the contours in the image 
    sort(contours.begin(), contours.end(), 
     compareContourAreas);   //Store the index of largest contour 
    bounding_rect = boundingRect(contours[0]); 

    rectangle(image, bounding_rect, Scalar(250, 250, 250), 5); 

這裏講的是眩光IM的照片:

enter image description here

我發現的東西在inRange中使用,爲顏色找到合適的標量,並使用inpaint去除光線。這是一個代碼片段,但它總是崩潰,說它需要chanels的8位圖像。

Mat &image = *(Mat *) matAddrRgba; 

    Mat hsv, newImage, inpaintMask; 
    cv::Mat lower_red_hue_range; 
    inpaintMask = Mat::zeros(image.size(), CV_8U); 
    cvtColor(image, hsv, COLOR_BGR2HSV); 
    cv::inRange(hsv, cv::Scalar(0, 0, 215, 0), cv::Scalar(180, 255, 255, 0), 
       lower_red_hue_range); 
    image = lower_red_hue_range; 

    inpaint(image, lower_red_hue_range, newImage, 3, INPAINT_TELEA); 
+0

您可以嘗試與服用3-4個快照,從不同的角度,以克服眩光的桌子上的效果。 – ZdaR

+1

如果你沒有回答答案,那麼你很難知道答案。 –

+0

眩光與鏡頭眩光消除技術非常相似,並且簡單地說,它們添加到RGB色彩空間以使其接近最大值。這可能會很複雜,您可能需要使用空間過濾器來確保儘可能保持背景。對於這樣的事物,有一種洋蔥皮方法,從3x3矩陣開始,去除額外的眩光成分,並以洋蔥皮朝着中心移動。你可以運行它來查看它是否遵循眩光模式並將其刪除。 –

回答

4

我之前已經處理了這個問題,並在照明變化總是檢測和圖像的描述在計算機視覺的一個問題。我實際上訓練了一個分類器,用於HSV色彩空間而不是RGB/BGR,它將圖像與變化的入射光映射到沒有突然亮度/暗色塊(這將是標籤)的圖像。這對我來說工作得非常好,但是,圖像始終是相同的背景(我不知道你是否也有這個)。

當然,機器學習可以解決這個問題,但它可能是一個矯枉過正的問題。當我在做上面提到的時候,我碰到了CLAHE,這對於本地對比度增強非常有效。我建議你在檢測輪廓之前嘗試一下。此外,您可能想要在不同的色彩空間上工作,例如HSV/Lab/Luv而不是RGB/BGR。您可以將CLAHE分別應用到每個頻道,然後合併它們。

讓我知道你是否需要一些其他信息。我用python實現了這個圖像,它工作的很好,但我會把編碼留給你。我可能會更新我在幾天後得到的結果(希望你先得到它們))。希望能幫助到你。

Gray image

V channel of HSV after CLAHE - clipLimit=10, TileGridSize= (16, 16)

+0

CLAHE技術在這方面似乎沒有幫助。我嘗試了你說的話,但似乎沒有奏效。你如何聲稱它會有所幫助? –

+0

@JeruLuke您是否嘗試過使用HSV量表中的不同參數? –

+0

是的,事實上,我完全按照你所說的去嘗試。你能否支持你的要求多一點?眩光消除的問題相當普遍.... –