अनुवर्ती: विशिष्टता से रंग छंटनी "

मूल प्रश्न

यदि आपको अधिकतम अधिकतम रंग (और कुछ संबंधित दूरी मीट्रिक) दिए जाते हैं, तो क्या आप उन रंगों को कुछ क्रम में क्रमबद्ध करने के लिए एक तरीके से आ सकते हैं जैसे कि पहले एम भी अधिकतम रूप से अलग सेट होने के कारण उचित रूप से बंद हो?

दूसरे शब्दों में, अलग-अलग रंगों का एक समूह दिया जाता है, एक आदेश के साथ आते हैं, इसलिए मैं शुरुआत में शुरू होने की आवश्यकता के रूप में कई रंगों का उपयोग कर सकता हूं और उचित रूप से आश्वासन दिया जाता हूं कि वे सभी अलग हैं और आस-पास के रंग भी बहुत अलग हैं (उदाहरण के लिए, नीला लाल लाल लाल नीले रंग के बगल में नहीं है)।

यादृच्छिकता ठीक है लेकिन निश्चित रूप से इष्टतम नहीं है।

स्पष्टीकरण: रंगों के कुछ बड़े और दृष्टि से अलग सेट (256, या 1024 कहें) को देखते हुए, मैं उन्हें सॉर्ट करना चाहता हूं कि जब मैं पहले उपयोग करता हूं, तो उनमें से 16 कहें कि मुझे रंगों की अपेक्षाकृत दृष्टि से अलग सबसेट मिलती है । यह लगभग कहने के बराबर है, मैं कह रहा हूं कि मैं 1024 की इस सूची को सॉर्ट करना चाहता हूं ताकि निकटतम रंग दृश्यमान हों, जितना दूर वे सूची में हैं।

0
जोड़ा संपादित
विचारों: 1

9 उत्तर

आप उन्हें आरजीबी हेक्स प्रारूप में विभाजित कर सकते हैं ताकि आप आर और आर के साथ आर के साथ एक अलग रंग की तुलना कर सकें, वही जी और बी के साथ।

एचटीएमएल के समान प्रारूप

XX XX XX
RR GG BB

00 00 00 = black
ff ff ff = white
ff 00 00 = red
00 ff 00 = green
00 00 ff = blue

तो केवल एक चीज आपको तय करने की आवश्यकता होगी कि आप रंगों को कितना करीब चाहते हैं और सेगमेंट के लिए अलग-अलग विचारों के लिए स्वीकार्य अंतर क्या है।

0
जोड़ा

ऐसा लगता है कि आपके लिए धारणा महत्वपूर्ण है, उस स्थिति में आप एक अवधारणात्मक रंग स्थान जैसे वाईयूवी, वाईसीबीसीआर या लैब के साथ काम करने पर विचार करना चाहेंगे। हर बार मैंने उन लोगों का उपयोग किया है, उन्होंने मुझे अकेले एसआरबीबी की तुलना में बेहतर परिणाम दिए हैं।

एसआरबीबी से और उससे कनवर्ट करना दर्द हो सकता है लेकिन आपके मामले में यह वास्तव में एल्गोरिदम को सरल बना सकता है और बोनस के रूप में यह ज्यादातर रंगीन अंधाओं के लिए भी काम करेगा!

0
जोड़ा

Do you mean that from a set of N colors, you need to pick M colors, where M < N, such that M is the best representation of the N colors in the M space?

एक बेहतर उदाहरण के रूप में, एक 8-बिट मैप किए गए रंग स्थान (जीआईएफ?) में एक सच्चे रंग (24 बिट रंग स्थान) को कम करें।

इसके लिए क्वांटिअलाइजेशन एल्गोरिदम हैं, जैसे कि अनुकूली स्थानिक सबडिविजन एल्गोरिदम ImageMagic द्वारा उपयोग किया जाता है।

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

अगर आपको कुछ और चाहिए तो मुझे आपका प्रश्न समझ में नहीं आया :)

0
जोड़ा

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

उदाहरण के लिए, शायद आप जो चाहते हैं उसे करने का एक तरीका है।

  1. Calculate the distance (ref your other post) from each color to all other colors
  2. Sum the distances for each color, this gives you an indication for how far away this color is from all other colors in total
  3. Order the list by distance, going down

ऐसा लगता है कि ऐसा लगता है कि एक ऐसी सूची तैयार होती है जो रंग के साथ शुरू होती है जो कि अन्य सभी रंगों से सबसे दूर है, और फिर नीचे जाएं, सूची के अंत की तरफ रंग सामान्य रूप से अन्य रंगों के करीब होंगे।

संपादित करें: स्थानिक उपखंड के बारे में, मेरी पहली पोस्ट में आपका उत्तर पढ़ना, उपर्युक्त विवरण में बिल्कुल फिट नहीं होगा, क्योंकि अन्य रंगों के नजदीक रंग सूची के नीचे आ जाएंगे, लेकिन मान लीजिए कि आपके पास कहीं रंगों का समूह है उस समूह के रंगों में से कम से कम एक सूची सूची की शुरुआत के पास स्थित होगा, और यह वह होगा जो आम तौर पर कुल मिलाकर अन्य सभी रंगों से सबसे दूर था। यदि इसका कोई औचित्य हो।

0
जोड़ा

आप किसी भी इंडेक्स रंगों में न्यूनतम दूरी के अधिकतम-दूरी के आधार पर उम्मीदवार रंगों को बस क्रमबद्ध कर सकते हैं।

यूक्लिडियन रंग दूरी का उपयोग करना:

public double colordistance(Color color0, Color color1) {
    int c0 = color0.getRGB();
    int c1 = color1.getRGB();
    return distance(((c0>>16)&0xFF), ((c0>>8)&0xFF), (c0&0xFF), ((c1>>16)&0xFF), ((c1>>8)&0xFF), (c1&0xFF));
}

public double distance(int r1, int g1, int b1, int r2, int g2, int b2) {
    int dr = (r1 - r2);
    int dg = (g1 - g2);
    int db = (b1 - b2);
    return Math.sqrt(dr * dr + dg * dg + db * db);
}

यद्यपि आप इसे अपनी इच्छानुसार किसी भी चीज़ से बदल सकते हैं। यह सिर्फ एक रंग दूरी दिनचर्या की जरूरत है।

public void colordistancesort(Color[] candidateColors, Color[] indexColors) {
    double current;

    double distance[] = new double[candidateColors.length];
    for (int j = 0; j < candidateColors.length; j++) {
        distance[j] = -1;
        for (int k = 0; k < indexColors.length; k++) {
            current = colordistance(indexColors[k], candidateColors[j]);
            if ((distance[j] == -1) || (current < distance[j])) {
                distance[j] = current;
            }
        }
    }

    //just sorts.
    for (int j = 0; j < candidateColors.length; j++) {
        for (int k = j + 1; k < candidateColors.length; k++) {
            if (distance[j] > distance[k]) {
                double d = distance[k];
                distance[k] = distance[j];
                distance[j] = d;

                Color m = candidateColors[k];
                candidateColors[k] = candidateColors[j];
                candidateColors[j] = m;
            }
        }
    }
}
0
जोड़ा
हालांकि, वास्तव में, यह उम्मीदवारों से दो बहुत ही समान रंगों का चयन कर सकता है। आप शायद सर्वश्रेष्ठ उम्मीदवार को ढूंढना चाहते हैं, इसे इंडेक्स रंगों में जोड़ें, और फिर से शुरू करें।
जोड़ा लेखक Tatarize, स्रोत

यदि मैं सही ढंग से प्रश्न को समझ रहा हूं, तो आप रंगों के बीच उच्चतम दूरी रंगों के साथ एम रंगों का सबसेट प्राप्त करना चाहते हैं, कुछ दूरी फ़ंक्शन d

N रंगों के प्रारंभिक सेट को एक बड़े, अप्रत्यक्ष ग्राफ के रूप में देखते हुए एक और तरीका रखें जिसमें सभी रंग जुड़े हुए हैं, आप सबसे लंबा पथ ढूंढना चाहते हैं जो किसी भी एम नोड्स।

एनपी-पूर्ण ग्राफ समस्याओं को हल करना मेरे बाहर रास्ता है, मुझे डर है, लेकिन आप एक साधारण शारीरिक सिमुलेशन चलाने का प्रयास कर सकते हैं:

  1. Generate M random points in colour space
  2. Calculate the distance between each point
  3. Calculate repulsion vectors for each point that will move it away from all other points (using 1 / (distance ^ 2) as the magnitude of the vector)
  4. Sum the repulsion vectors for each point
  5. Update the position of each point according to the summed repulsion vectors
  6. Constrain any out of bound coordinates (such as luminosity going negative or above one)
  7. Repeat from step 2 until the points stabilise
  8. For each point, select the nearest colour from the original set of N

यह कुशल से बहुत दूर है, लेकिन छोटे एम के लिए यह काफी कुशल हो सकता है, और यह निकटतम परिणाम देगा।

यदि आपका रंग दूरी फ़ंक्शन सरल है, तो इष्टतम सबसेट उत्पन्न करने का एक और निर्धारक तरीका हो सकता है।

0
जोड़ा
यह एनपी-पूर्ण नहीं है। यह या तो किसी भी इंडेक्स रंग ओ (एन) या औसत ओ (एन) द्वारा न्यूनतम दूरी से अधिकतम क्रमबद्ध ओ (एनएलओजी (एन)) है। यह स्पष्ट रूप से ओ (एन + एनएलओजी (एन)) या ओ (एनएलओजी (एन)) है। सबसे खराब स्थिति आपको अनुक्रमित रंगों को क्रमबद्ध रंगों में जोड़ने की आवश्यकता है, जिससे इसे N²Log (N) बना दिया जा सके। सर्वोत्तम खोजें, इसे इंडेक्स रंगों की सूची में जोड़ें। प्रारंभ करें।
जोड़ा लेखक Tatarize, स्रोत

इस समस्या को रंग क्वांटिज़ेशन कहा जाता है, और इसमें कई प्रसिद्ध एल्गोरिदम हैं: http://en.wikipedia.org/ विकी / color_quantization मैं उन लोगों को जानता हूं जिन्होंने अच्छे प्रभाव के लिए ऑक्टेट दृष्टिकोण को लागू किया।

0
जोड़ा

एन अधिकतम दूरी वाले रंगों को 3-आयामी (रंग) स्थान में अच्छी तरह से वितरित बिंदुओं का एक सेट माना जा सकता है। यदि आप उन्हें हैल्टन अनुक्रम से उत्पन्न कर सकते हैं, तो कोई भी उपसर्ग (पहला एम रंग) भी अच्छी तरह से वितरित अंक होते हैं।

0
जोड़ा
  1. दो सूचियों से शुरू करें। उम्मीदवार रंग, जो शुरू में आपके विशिष्ट रंग और सॉर्टेड कॉलर्स होते हैं, जो प्रारंभ में खाली होते हैं।
  2. किसी भी रंग को चुनें और इसे उम्मीदवारों से हटा दें और इसे सॉर्ट किए गए रंगों में रखें। यह पहला रंग है और यह सबसे आम होगा, इसलिए यह आपके रंग के साथ अच्छी तरह से रंग लेने के लिए एक अच्छी जगह है।
  3. CandidateColors में प्रत्येक रंग के लिए इसकी कुल दूरी की गणना करें। कुल दूरी CandedateColor से क्रमबद्ध रंगों में से प्रत्येक रंग की दूरी का योग है।
  4. उम्मीदवारों से सबसे बड़ी दूरी के साथ रंग निकालें और इसे सॉर्ट किए गए रंगों के अंत में जोड़ें।
  5. यदि उम्मीदवारों को खाली नहीं है, तो चरण 3 पर वापस जाएं।

इस लालची एल्गोरिदम आपको अच्छे परिणाम देनी चाहिए।

0
जोड़ा