2017-04-18 13 views
9

से चमक हटाएं तो, मैं दस्तावेज़ को कैप्चर करने, इसे स्कैन करने और इसे फसल करने के लिए opencv का उपयोग कर रहा हूं। कमरे में कोई प्रकाश नहीं होने पर, यह पूरी तरह से काम करता है। कमरे में कुछ प्रकाश होने पर, और मेज पर एक चमक है और दस्तावेज़ इसके पास है, यह आयताकार के हिस्से के रूप में चमक को पकड़ता है।फोटो opencv

कोई फ़ोटो से चमक कैसे हटा सकता है?

enter image description here

बातें हैं मैं पाया है:

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 की एक तस्वीर है:

यहाँ छवि मैं चाहता हूँ प्राप्त करने के लिए का उपयोग कर कोड im है रेंज में उपयोग करने के लिए, रंग के लिए अनुचित स्केलर ढूंढें और हमें प्रकाश हटाने के लिए बाध्य करें। यहां एक कोड स्निपेट है, लेकिन यह हमेशा क्रैश करता है कि इसे चैनलों के साथ 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

चमक लेंस फ्लेयर हटाने तकनीकों के समान ही है और सरल शब्दों में वे अधिकतम मूल्य के करीब बनाने के लिए आरजीबी रंग स्थान में जोड़ते हैं। इसका वितरण जटिल हो सकता है और आपको यह सुनिश्चित करने के लिए एक स्थानिक फ़िल्टर का उपयोग करना पड़ सकता है कि आप जितना संभव हो सके पृष्ठभूमि को यथार्थवादी रखें। ऐसी चीजों के लिए एक प्याज छील विधि है जहां आप 3x3 मैट्रिक्स के सेट से शुरू करते हैं और अतिरिक्त चमक घटक को हटाते हैं और केंद्र के प्रति प्याज छील फैशन में स्थानांतरित करते हैं। आप यह देखने के लिए इसे चला सकते हैं कि क्या यह चमकदार पैटर्न का पालन करता है और इसे हटा देता है। –

उत्तर

4

मैंने पहले इस समस्या के साथ पेश किया है, और प्रकाश व्यवस्था में परिवर्तन हमेशा पता लगाने और छवियों के विवरण के लिए कंप्यूटर विजन में एक समस्या है। मैंने वास्तव में आरजीबी/बीजीआर की बजाय एचएसवी रंग रिक्त स्थान के लिए एक क्लासिफायरफायर को प्रशिक्षित किया, जो उस छवि को बदल रहा था जिसमें अचानक चमक/अंधेरे पैच नहीं थे (यह लेबल होगा)। यह मेरे लिए काफी अच्छा काम करता था, हालांकि, छवियां हमेशा एक ही पृष्ठभूमि के थे (मुझे नहीं पता कि आपके पास यह भी है)।

बेशक, मशीन सीखने से समस्या हल हो सकती है लेकिन यह एक ओवरकिल हो सकती है। जबकि मैं ऊपर उल्लिखित कर रहा था, मैं CLAHE पर आया जो स्थानीय विपरीत वृद्धि के लिए बहुत अच्छी तरह से काम करता था। मेरा सुझाव है कि आप समोच्चों का पता लगाने से पहले इसे आजमाएं। इसके अतिरिक्त, आप इस उद्देश्य के लिए आरजीबी/बीजीआर के बजाय एचएसवी/लैब/लव जैसे विभिन्न रंग स्थान पर काम करना चाहेंगे। आप प्रत्येक चैनल को अलग से क्लास लागू कर सकते हैं और फिर उन्हें मर्ज कर सकते हैं।

अगर आपको कुछ अन्य जानकारी चाहिए तो मुझे बताएं। मैंने इसे अपनी छवि के साथ अजगर में कार्यान्वित किया है, यह बहुत अच्छी तरह से काम करता है, लेकिन मैं आपको कोडिंग छोड़ दूंगा। मैं कुछ दिनों के बाद मिलने वाले परिणामों को अपडेट कर सकता हूं (उम्मीद है कि आप उन्हें पहले प्राप्त करेंगे;))। आशा करता हूँ की ये काम करेगा।

Gray image

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

+0

क्लाउ तकनीक इस पहलू में मदद नहीं कर रही है। मैंने कोशिश की कि आपने क्या कहा लेकिन यह काम नहीं कर रहा है। आप कैसे दावा करते हैं कि इससे मदद मिलेगी? –

+0

@JeruLuke क्या आपने एचएसवी स्केल में विभिन्न मानकों के साथ प्रयास किया था? –

+0

हां, वास्तव में मैंने ठीक उसी तरह कोशिश की जैसा आपने कहा था। क्या आप अपने दावे का थोड़ा और समर्थन कर सकते हैं? चमक हटाने की समस्या काफी आम है .... –