2017-04-18 46 views
9

Yani, bir belgeyi yakalamak, taramak ve kırpmak için opencv kullanıyorum. Odada ışık olmadığında, mükemmel çalışır. Odada biraz ışık olduğunda ve masanın üzerinde bir parlama olduğunda ve belge buna yakın olduğunda, parıltı da dikdörtgenin bir parçası olarak yakalar.Fotoğraftan parlamayı kaldır opencv

Fotoğraftaki parlamayı nasıl kaldırabilirim?

enter image description here

buldum şeyler şunlardır: bahsediyoruz parlama im fotoğraf İşte

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); 

edilir: Burada

istediğim görüntüyü elde etmek için kullanan kod im inRange'ı kullanmak için, rengi temizlemek için uygun skalerleri ve ışığı çıkarmak için boyaları bulduk. İşte bunun bir kod snippet'i, ancak her zaman 8 bitlik görüntüye ihtiyaç duyduğunu söyleyerek çöküyor.

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

Sen masaya parlama etkisini aşmak için çeşitli açılardan 3-4 anlık alarak deneyebilirsiniz. – ZdaR

+1

Cevaplara cevap vermezseniz, bilmeniz zor olacaktır. –

+0

Parlama, mercek parlaması giderme tekniklerine çok benzer ve basit bir şekilde, maksimum değere yakın hale getirmek için RGB renk uzayına eklenirler. Bunun dağılımı karmaşık olabilir ve arka planı olabildiğince gerçekçi tuttuğunuzdan emin olmak için bir uzaysal filtre kullanmanız gerekebilir. 3x3 matris setinden başladığınız ve ek parlama bileşenini çıkardığınız ve soğan kabuğu modasını merkeze doğru hareket ettirdiğiniz bu tür şeyler için bir soğan kabuğu yöntemi vardır. Parlama desenini takip edip onu takip edip etmediğini bulmak için onu çalıştırabilirsiniz. –

cevap

4

Daha önce bu sorunla ele alınmıştır ve aydınlatmada değişim her zaman algılama ve görüntü açıklaması için Computer Vision bir sorundur. Ben aslında, RGB/BGR yerine HSV renk uzayları için bir sınıflandırıcıyı eğitmiştim. Bu, görüntüyü, gelen parlaklığı/ani parlaklığı/karanlık lekeleri olmayan etiketle eşleştiriyordu (bu etiket olurdu). Bu benim için gayet iyi çalıştı, ancak, görüntüler her zaman aynı geçmişe sahipti (Bende bunun olup olmadığını bilmiyorum).

Elbette, makine öğrenimi sorunu çözebilir, ancak bu aşırı bir sıkıntı olabilir. Ben yukarıda belirtilen yaparken, ben yerel kontrast geliştirme için oldukça iyi çalıştı CLAHE rastladım. Kontürleri tespit etmeden önce bunu denemenizi öneririm. Ayrıca, bu amaç için RGB/BGR yerine HSV/Lab/Luv gibi farklı bir renk alanı üzerinde çalışmak isteyebilirsiniz. CLAHE'yi her bir kanala ayrı ayrı uygulayabilir ve daha sonra bunları birleştirebilirsiniz.

Başka bir bilgiye ihtiyacınız varsa bildirin. Bunu python'daki resminizle uyguladım, gayet güzel çalışıyor, ancak kodlamayı size bırakacağım. Birkaç gün sonra elde ettiğim sonuçları güncelleyebilirim (önce onları almanızı umuyordum;)). Umarım yardımcı olur.

Gray image

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

+0

CLAHE tekniği bu konuda yardımcı görünmüyor. Söylediklerinizi denedim ama işe yaramıyor. Bunun yardımcı olacağını nasıl iddia edersiniz? –

+0

@JeruLuke HSV ölçeğinde farklı parametrelerle denediniz mi? –

+0

Evet, infact dediğin gibi denedim. Talebinizi biraz daha destekleyebilir misiniz? Parlama kaldırma sorunu oldukça yaygındır .... –