किसी वस्तु के रंग का निर्धारण करने का सबसे सटीक तरीका क्या है?


33

मैंने एक कंप्यूटर प्रोग्राम लिखा है जो कंप्यूटर की दृष्टि के लिए कुछ मानक तकनीकों (गाऊसी ब्लर, थ्रॉल्डिंग, ह्यू-ट्रांसफॉर्म आदि) का उपयोग करके एक स्थिर छवि (.jpeg, .png, आदि) में सिक्कों का पता लगा सकता है। किसी दिए गए चित्र से उठाए गए सिक्कों के अनुपात का उपयोग करके, मैं अच्छी निश्चितता के साथ स्थापित कर सकता हूं कि कौन से सिक्के हैं। हालांकि, मैं अपने आत्मविश्वास के स्तर में जोड़ना चाहता हूं और यह भी निर्धारित करता हूं कि क्या एक सिक्का जिसे मैं टाइप-ए (रेडियस अनुपात से) के लिए घटाता हूं वह भी सही कॉलो [यू] आर का है। समस्या यह है कि ब्रिटिश सिक्कों के लिए एट अल। (कॉपर, सिल्वर, गोल्ड), संबंधित रंग (कॉपर से गोल्ड तक) बहुत समान हैं।

मेरा एक रूटीन है जो RedGreenBlue (RGB) 'कलर-स्पेस' के संदर्भ में दिए गए सिक्के के माध्य रंग को निकालता है और इस रंग को HueSaturationBrightness (HSB या HSV) 'कलर-स्पेस' में परिवर्तित करता है।

RGB तीन सिक्का रंगों के बीच अंतर करने के प्रयास में काम करने के लिए बहुत अच्छा नहीं है (उदाहरण के लिए संलग्न [मूल] छवि देखें)। मेरे पास विभिन्न सिक्कों के रंगों के लिए निम्न रेंज और विशिष्ट मूल्य हैं:

नोट: यहां विशिष्ट मूल्य वास्तविक छवि के 'पिक्सेल-वार' माध्य का उपयोग करके चुना गया है।

**Copper RGB/HSB:** typicalRGB = (153, 117, 89)/(26, 0.42, 0.60).

**Silver RGB/HSB:** typicalRGB = (174, 176, 180)/(220, 0.03, 0.71).

**Gold RGB/HSB:** typicalRGB = (220, 205, 160)/(45, 0.27, 0.86) 

मैंने पहली बार एक दिए गए माया रंग (आरजीबी का उपयोग करके) के बीच 'यूक्लिडियन दूरी' का उपयोग करने की कोशिश की और आरजीबी मानों को वेक्टर के रूप में मानते हुए ऊपर दिए गए प्रत्येक सिक्के प्रकार के लिए विशिष्ट मान; तांबे के लिए हमारे पास होगा:

Dcopper=((RtypeRcopper)2+(GtypeGcopper)2+(BtypeBcopper)2)

जहां अंतर का सबसे छोटा मान ( D ) हमें बताता है कि दिया गया सिक्का किस प्रकार का है। इस विधि ने खुद को बहुत गलत दिखाया है।

मैंने ऊपर दिए गए प्रकारों के विशिष्ट मूल्यों के साथ सिक्कों के रंग की तुलना करने की भी कोशिश की है। यद्यपि सैद्धांतिक रूप से यह चित्रों की बदलती चमक और संतृप्ति स्तर से निपटने के लिए बहुत बेहतर 'रंग-स्थान' प्रदान करता है, यह भी बहुत सटीक नहीं था।

प्रश्न: रंग के आधार पर (स्थिर छवि से) सिक्कों के प्रकार का निर्धारण करने के लिए सबसे अच्छी विधि क्या है?

आपके समय के लिए अत्यधिक धन्यवाद।

विशिष्ट सिक्का रंग

संपादित करें 1

नोट: मैंने नीचे चर्चा किए गए सभी विचारों की कोशिश की है और कुछ भी नहीं के आगे हासिल किया है। प्रकाश की स्थिति में भिन्नता (यहां तक ​​कि एक ही छवि के भीतर) इस समस्या को बहुत कठिन बना देती है और इसे ध्यान में रखा जाना चाहिए।

2 संपादित करें (आउटकम की समर)

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

मैं नीचे DW द्वारा बहुत उपयोगी पोस्ट से Gamut बाधा विधि में देखा । यह पहली नजर में छवि को बदलने के लिए एक पूर्व-प्रसंस्करण कदम के रूप में बहुत ही आशाजनक था और अलग-अलग सिक्का वस्तुओं को उन रंगों के लिए जो प्रकाश की स्थिति से स्वतंत्र हैं। हालांकि, यहां तक ​​कि यह तकनीक पूरी तरह से काम नहीं करती है (और इसमें मैपिंग के लिए छवियों / हिस्टोग्राम्स का एक पुस्तकालय शामिल है - जो मैं इसमें नहीं आना चाहता) और न ही बहुत अधिक जटिल न्यूरल नेटवर्क आर्किटेक्चर के तरीके। वास्तव में यह कागज सार में बताता है कि:

"current machine colour constancy algorithms are not good enough for colour-based 
 object recognition.".

यह कहना नहीं है कि इस विषय पर बहुत अधिक अप-टू-डेट पेपर नहीं हैं, लेकिन मैं उन्हें नहीं ढूंढ सकता हूं और यह इस समय बहुत सक्रिय शोध क्षेत्र नहीं लगता है।

जवाब AVB द्वारा भी मददगार था और मैं एल में देखा है एक बी * संक्षेप में।

"The nonlinear relations for L*, a*, and b* are intended to mimic the nonlinear
response of the eye. Furthermore, uniform changes of components in the L*a*b* colour
space aim to correspond to uniform changes in perceived colour, so the relative 
perceptual differences between any two colours in L*a*b* can be approximated by 
treating each colour as a point in a three dimensional space."

मैंने जो कुछ पढ़ा है, उससे मेरे डिवाइस पर निर्भर चित्रों के लिए इस रंग स्थान में परिवर्तन मुश्किल हो जाएगा - लेकिन मैं इस पर विस्तार से (कुछ प्रकार के कार्यान्वयन के साथ) जब मेरे पास थोड़ा और समय होगा।

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

सभी को धन्यवाद। और इस प्रश्न के अंतिम नोट के रूप में, यहां एक नई ज्यामितीय पहचान एल्गोरिथ्म के साथ एक ही छवि है, जिसकी कोई रंग पहचान नहीं है:

यहाँ छवि विवरण दर्ज करें


1
क्या छवियों में हमेशा एक ही रंग की पृष्ठभूमि होगी? या आप छवि में कुछ अन्य 'रंग मानक' ऑब्जेक्ट का परिचय दे सकते हैं? यदि हां, तो आपके पास अलग-अलग प्रकाश व्यवस्था के लिए समायोजन का एक तरीका है। यदि नहीं, तो मुश्किल हो सकता है ..
OneStop

2
यह सिर्फ स्पष्ट रूप से रंगीन प्रकाश नहीं है। मुझे पूरा यकीन है कि सूरज की रोशनी, फ्लोरोसेंट लाइट और गरमागरम रोशनी में ऐसे रंग होते हैं जो एचएसबी कलर-मैचिंग को गड़बड़ाने के लिए अलग-अलग होते हैं, भले ही हमारी आँखें किसी भी तरह से समायोजित हो जाती हैं ताकि हम रंग बदलने वाली चीजों का अनुभव न करें।
पीटर शोर

2
(+1) प्रश्न रोचक और चुनौतीपूर्ण है। मुझे लगता है कि एक अच्छे उत्तर में एक अच्छा मौका पाने के लिए इसे कुछ परिशोधन की आवश्यकता होती है। जैसा कि वर्तमान में कहा गया है कि यह बीमार होने पर सीमाएं हैं। एक व्यावहारिक समाधान के लिए, आपको पर्यावरण की उस सीमा पर कुछ और विवरण प्रदान करने की आवश्यकता होगी जिसमें आप इस वर्गीकरण को करने में सक्षम होना चाहते हैं। किस रंग की पृष्ठभूमि संभव है? हमेशा समान संख्या में सिक्के? क्या आपके पास हमेशा एक रंगीन छवि होगी? अच्छा परिवेश प्रकाश? इस प्रकार की विशेषताओं को जानने से समाधान की दिशा में मार्गदर्शन मिल सकता है।
कार्डिनल

2
मुझे लगता है कि आप जिस समस्या का सामना कर रहे हैं, वह "रंग की कमी" है, अन्य खोज शब्द "प्रबुद्ध को छूट" या "पृष्ठभूमि को छूट देने" होंगे। यह दृष्टि विज्ञान में एक अनसुलझी समस्या है।
काराकल

1
काश मैं अच्छा अनुवर्ती के लिए फिर से +1 कर सकता था! बहुत ही रोचक सामग्री।
मैट पार्कर

जवाबों:


6

शुरुआत के लिए दो बातें।

एक, निश्चित रूप से RGB में काम नहीं करते हैं। आपका डिफ़ॉल्ट लैब होना चाहिए (उर्फ CIE L * a * b *) कलरस्पेस। त्याग दो L। आपकी छवि से ऐसा लगता है कि aसमन्वय आपको सबसे अधिक जानकारी देता है, लेकिन आपको संभवतः एक प्रमुख घटक विश्लेषण करना चाहिए aऔर bपहले (सबसे महत्वपूर्ण) घटक के साथ काम करना चाहिए , बस चीजों को सरल रखने के लिए। यदि यह काम नहीं करता है, तो आप एक 2 डी मॉडल पर स्विच करने का प्रयास कर सकते हैं।

बस इसके लिए एक भावना प्राप्त करने के लिए, aतीन पीले सिक्कों में 6 से नीचे एसटीडी हैं, और 137 ("सोना"), 154, और 162 के साधन - अलग-अलग होने चाहिए।

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

इसके अलावा, आपकी छवि को काफी सस्ते कैमरे के साथ लिया गया था, इसके लुक से। संभवतः इसमें कुछ प्रकार के स्वचालित श्वेत संतुलन सुविधा है, जो रंगों को बहुत खराब कर देता है - यदि आप कर सकते हैं तो इसे बंद कर दें। यह भी दिखता है कि छवि को या तो YCbCr में किसी बिंदु पर कोडित किया गया था (बहुत होता है अगर यह वीडियो कैमरा है) या जेपीजी के समान संस्करण में; रंग की जानकारी गंभीर रूप से कम नहीं है। आपके मामले में यह वास्तव में अच्छा हो सकता है - इसका मतलब है कि रंग चैनलों में कैमरे ने आपके लिए कुछ ख़राब किया है। दूसरी ओर, इसका शायद मतलब है कि कुछ बिंदु पर रंग की जानकारी भी चमक की तुलना में अधिक मजबूत थी - यह इतना अच्छा नहीं है। यहां मुख्य बात है - कैमरा मायने रखता है, और आपको जो करना है वह उस कैमरे पर निर्भर होना चाहिए जिसका आप उपयोग करने जा रहे हैं।

अगर यहाँ कुछ भी मतलब नहीं है - एक टिप्पणी छोड़ दो।


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

6

बुद्धिशीलता की भावना में, मैं कुछ विचारों को साझा करूँगा जिन्हें आप आज़मा सकते हैं:

  1. अधिक प्रयास करें? ऐसा लगता है कि ह्यू ने आपको चांदी और तांबे / सोने के बीच बहुत अच्छा भेदभाव दिया है, हालांकि तांबे और सोने के बीच नहीं, कम से कम आपके द्वारा यहां दिखाए गए एकल उदाहरण में। क्या आपने ह्यू का उपयोग करके अधिक विस्तार से देखा है, यह देखने के लिए कि क्या यह तांबे / सोने से चांदी को अलग करने के लिए एक व्यवहार्य विशेषता हो सकती है?

    मैं उदाहरण छवियों का एक समूह इकट्ठा करके शुरू कर सकता हूं, जिसे आपने मैन्युअल रूप से लेबल किया है, और प्रत्येक छवि में प्रत्येक सिक्के के ह्यू की गणना कर रहा है। तब आप उन्हें हिस्टोग्राम करने की कोशिश कर सकते हैं, यह देखने के लिए कि क्या भेदभाव करने के लिए एक प्रशंसनीय तरीका दिखता है। मैं आपके द्वारा प्रस्तुत किए गए उदाहरण जैसे मुट्ठी भर उदाहरणों के लिए प्रत्येक सिक्के के औसत ह्यू को देखने का प्रयास कर सकता हूं। आप संतृप्ति को भी आज़मा सकते हैं, जैसा कि देखा कि यह सहायक भी हो सकता है।

    यदि यह विफल रहता है, तो आप अपने प्रश्न को संपादित करने के लिए यह दिखाना चाह सकते हैं कि आपने क्या प्रयास किया है और कुछ उदाहरण देकर स्पष्ट करें कि यह क्यों कठिन है या जहां आप विफल होते हैं।

  2. अन्य रंग रिक्त स्थान? इसी प्रकार, आप आरजी गुणन में बदलने की कोशिश कर सकते हैं और फिर यह देखने के लिए प्रयोग कर सकते हैं कि परिणाम तांबे / सोने से चांदी को अलग करने में सहायक है या नहीं। यह संभव है कि यह रोशनी भिन्नता के लिए समायोजित करने में मदद कर सकता है, इसलिए यह कोशिश करने लायक हो सकता है।

  3. nnn

    npnnonp,oToT(p)oiT(pi)TT(x)=x+c(mod360)c

  4. CRRC

    CθRθRθC(x,y)D(x,y)=Rθ(x,y)C(x,y) (the difference between the pixel value in Rθ and the pixel value in C); then use a L2 norm (sum of squares) or somesuch to combine all of the difference values into a single metric of how close a match you have (i.e., (x,y)D(x,y)2). You will need to use a small enough step increment that the pixel diff is likely to work. For instance, in your example image, the one-pound coin has a radius of about 127 pixels; if you sweep over values of θ, increasing by 0.25 degrees at each step, then you will only need to try about 1460 different rotation values, and the error at the circumference of the coin at the closest approximation to the true θ should be at most about one-quarter of a pixel, which is small enough that the pixel diff might work out OK.

    You may want to experiment with multiple variations on this idea. For instance, you could work with a grayscale version of the image; the full RGB, and use a L2 norm over all three R,G,B differences; the full HSB, and use a L2 norm over all three H,S,B differences; or work with just the Hue, Saturation, or Brightness plane. Also, another possibility would be to first run an edge detector on both R and C, then match up the resulting image of edges.

    For robustness, you might have multiple different reference images for each coin (in fact, each side of each coin), and try all of the reference images to find the best match.

    If images of the coins aren't taken from directly head-on, then as a first step you may want to compute the ellipse that represents the perimeter of the coin C in the image and infer the angle at which the coin is being viewed. This will let you compute what R would look like at that angle, before performing the matching.

  5. Check how color varies as a function of distance from the center? Here is a possible intermediate step in between "the coin's mean color" (a single number, i.e., 0-dimensional) and "the entire image of the coin" (a 2-dimensional image). For each coin, you could compute a 1-dimensional vector or function f, where f(r) represents the mean color of the pixels at distance approximately r from the center of the coin. You could then try to match the vector fC for a coin C in your image against the vector fR for a reference image R of that coin.

    This might let you correct for illumination differences. For instance, you might be able to work in grayscale, or in just a single bitplane (e.g., Hue, or Saturation, or Brightness). Or, you might be able to first normalize the function f by subtracting the mean: g(r)=f(r)μ, where μ is the mean color of the coin -- then try to match gC to gR.

    The nice thing about this approach is that you don't need to infer how much the coin was rotated: the function f is rotation-invariant.

    If you want to experiment with this idea, I would compute the function fC for a variety of different example images and graph them. Then you should be able to visually inspect them to see if the function seems to have a relatively consistent shape, regardless of illumination. You might need to try this for multiple different possibilities (grayscale, each of the HSB bitplanes, etc.).

    If the coin C might not have been photographed from directly head-on, but possibly from an angle, you'll first need to trace the ellipse of C's perimeter to deduce the angle from which it was photographed and then correct for that in the calculation of f.

  6. Look at vision algorithms for color constancy. The computer vision community has studied color constancy, the problem of correcting for an unknown illumination source; see, e.g., this overview. You might explore some of the algorithms derived for this problem; they attempt to infer the illumination source and then correct for it, to derive the image you would have obtained had the picture been taken with the reference illumination source.

  7. Look into Color Constant Color Indexing. The basic idea of CCCI, as I understand it, is to first cancel out the unknown illumination source by replacing each pixel's R value with the ratio between its R-value and one of its neighbor's R-values; and similarly for the G and B planes. The idea is that (hopefully) these ratios should now be mostly independent of the illumination source. Then, once you have these ratios, you compute a histogram of the ratios present in the image, and use this as a signature of the image. Now, if you want to compare the image of the coin C to a reference image R, you can compare their signatures to see if they seem to match. In your case, you may also need to adjust for angle if the picture of the coin C was not taken head-on -- but this seems like it might help reduce the dependence upon illumination source.

I don't know if any of these has a chance of working, but they are some ideas you could try.


3

Interesting problem and good work.

Try using median colour values rather than mean. This will be more robust against outlier values due to brightness and saturation. Try using just one of the RGB components instead of all three. Choose the component that best distinguishes the colours. You could try plotting histograms of the pixel values (e.g. one of the RGB components) to give you an idea of the properties of the pixel distribution. This might suggest a solution that is not immediately obvious. Try ploting the RGB components in 3D space to see if they follow any pattern, for example they may lie close to a line indicating that a linear combination of the RGB components may be a better classifier than an individual one.


Good shout with the median, in fact I have also coded this and this also poor in terms of establishing the correct colour. With the histogram approach, I am conscious of computational expense; as soon as I start looping through pixels in 2D I will incur charges! Never-the-less, it might be worth me putting something like this in (as you point out) to establish any correlations. I produced all sorts of plots for the RGB components and due to the varying lighting conditions (a consequence of taking pictures in differing locations) the RGB values can overlap heavily for all three coin types.
MoonKnight

I have also looked at fitting a model to estimate a posterior probability of a color space point to belong to a certain coin type. I have also looked at Gaussian mixture modelling, but I have not got very far with this as yet. I have also been informed about another (somewhat arbitrary, but simpler) approach, and that is to use something like nearest-neighbour interpolation. Thanks for your time.
MoonKnight

1
On a completely different track, another difference between the coins is the design on the front/back (although some may have the same design on one side) What about cross correlating the set of design patterns with the coin pixels (or using mutual information) to help determine which coin you are looking at. With a combination of ratios, pixel colour and this design matching you will probably be able to reduce the false discovery rate.
martino

I have thought of this - but this is asking too much of the current recognition software and would be a massive job to write from scratch (OCR??). Also there is a huge variation in the graphics on such coins which make such an implementation a maintenece nightmare. I am going to have a play later - I will report what I find. Thanks again.
MoonKnight

Why the downvote? If there's an issue with the answer it'd be helpful to point it out - I can't see one
martino
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.