অনুসরণ করুন: স্বতন্ত্রতা দ্বারা "সাজানো" রং

মূল প্রশ্ন

যদি আপনি এন সর্বাধিক দূরবর্তী রং দেওয়া হয় (এবং কিছু সংযুক্ত দূরত্ব মেট্রিক), আপনি কিছু আদেশ মধ্যে যে রং বাছাই করার একটি উপায় সঙ্গে আসতে পারেন যেমন প্রথম এম একটি যুক্তিসঙ্গতভাবে স্বতন্ত্র সেট হওয়ার যুক্তিসঙ্গত বন্ধ হয়?

অন্য কথায়, আলাদা রঙের একটি গুচ্ছ দেওয়া, একটি আদেশ সঙ্গে আসা পর্যন্ত আমি শুরুতে শুরু হিসাবে প্রয়োজন হিসাবে আমি অনেক রং ব্যবহার করতে পারেন এবং যথাযথভাবে তারা সব স্বতন্ত্র এবং যে কাছাকাছি রং খুব স্বতন্ত্র (যেমন, নীল লাল লাল রং এর পাশে নয়)।

র্যান্ডমাইজিং ঠিক আছে কিন্তু অবশ্যই অনুকূল নয়।

স্পষ্টীকরণ: রংগুলির কিছু বড় এবং দৃশ্যত আলাদা আলাদা সেট (২56 বা 1024) বললে আমি তাদের এই ধরণের সাজানোর চেষ্টা করবো, যখন আমি প্রথমটি ব্যবহার করবো, বলব, 16 টির মধ্যে আমি একটি অপেক্ষাকৃত আলাদা আলাদা উপসর্গ পেয়েছি । এটি সমতুল্য, প্রায়শই বলতে গেলে, আমি এই তালিকাটি 1024 বাছাই করতে চাই যাতে আরও স্বতন্ত্র রংগুলি দৃশ্যত হয়, সেগুলি ছাড়াও আরও তালিকায় রয়েছে।

0

9 উত্তর

আপনি তাদের RGB HEX বিন্যাসে বিভক্ত করতে পারেন যাতে আপনি R এর সাথে R এর R রঙের ভিন্ন ভিন্ন রঙের সাথে তুলনা করতে পারেন।

এইচটিএমএল হিসাবে একই ফর্ম্যাট

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
যোগ

মনে হচ্ছে ধারণা আপনার কাছে গুরুত্বপূর্ণ, সেই ক্ষেত্রে আপনি YUV, YCbCr বা ল্যাবের মতো একটি চিত্তাকর্ষক রঙের স্থান সঙ্গে কাজ বিবেচনা বিবেচনা করতে পারেন। প্রত্যেকবার আমি তাদের ব্যবহার করেছি, তারা আমাকে আরআরজিবি তুলনায় অনেক ভালো ফলাফল দিয়েছে

আরআরজিবি থেকে রূপান্তরিত হতে পারে একটি ব্যথা কিন্তু আপনার ক্ষেত্রে এটি আসলে অ্যালগরিদম সহজ করতে পারে এবং একটি বোনাস হিসাবে এটি বেশিরভাগ ক্ষেত্রেই রঙিন অন্ধদের জন্য কাজ করে!

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-বিট মাপ রঙের স্থান (GIF?) এ একটি সত্য-রঙ (24 বিট রঙের স্থান) কমাতে

এই জন্য quantization অ্যালগরিদম হয়, যেমন ইমেজ ম্যাগনিক দ্বারা ব্যবহৃত অ্যাডাপ্টিভ স্প্যাসিয়াল সাবডিভিশন অ্যালগরিদম

এই অ্যালগরিদমগুলি সাধারণত উত্সের স্থান থেকে বিদ্যমান রঙগুলি বেছে নেয় না কিন্তু লক্ষ্যস্থানের স্থানগুলিতে নতুন রং তৈরি করে যা সোর্স রংগুলির সাথে ঘনিষ্ঠভাবে মিলন করে। একটি সরল উদাহরণ হিসাবে, যদি আপনার মূল ছবিতে 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
যোগ
যদিও, সত্যিই, এই প্রার্থী থেকে দুটি খুব অনুরূপ রং নির্বাচন করতে পারে Colors। আপনি শুধু সেরা প্রার্থীর রঙ খুঁজে পেতে চাইবেন, এটি সূচী রংগুলিতে যোগ করুন এবং আবার সব শুরু করুন।
যোগ লেখক Tatarize, উৎস

যদি আমি প্রশ্নটি সঠিকভাবে বুঝে থাকি, তাহলে M রঙের উপসেটটি সর্বোচ্চ গড় দূরত্ব এর সাথে রংগুলির মধ্যে কিছু দূরত্ব ফাংশন প্রদান করতে চাই d </ই.এম.>।

N রঙের প্রাথমিক সেটটি বিবেচনা করে একটি বৃহৎ, নিখরচায় গ্রাফ হিসাবে বিবেচনা করুন যা সমস্ত রং সংযুক্ত থাকে, আপনি দীর্ঘতম পথ খুঁজে বের করতে চান যে < > এম </এম> নোড

NP- সম্পূর্ণ গ্রাফ সমস্যার সমাধান উপায় আমি ভয় পাচ্ছি না, কিন্তু আপনি একটি সহজ শারীরিক সিমুলেশন চালানোর চেষ্টা করতে পারেন:

  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

এটি দক্ষ থেকে অনেকদূর, কিন্তু ছোট M এটি যথেষ্ট দক্ষ হতে পারে, এবং এটা অনুকূল ফলাফল কাছাকাছি দিতে হবে।

যদি আপনার রঙের দূরত্বের ফাংশন সহজ হয়, তবে অনুকূল উপসেট উৎপাদনের একটি আরো নির্ধারক উপায় হতে পারে।

0
যোগ
এটি এনপি-সম্পূর্ণ নয় এটি হয় বাছাই করে O (NLog (N)) সর্বনিম্ন দূরত্ব সর্বাধিক ন্যূনতম দূরত্ব O (N) অথবা গড় O (N) দ্বারা। এটি পরিষ্কারভাবে O (N + NLog (N)) বা O (NLog (N))। সবচেয়ে খারাপ ক্ষেত্রে আপনাকে এন-সি-লোগ (এন) তৈরি করে, রং অনুসারে সাজানো রং যুক্ত করতে হবে। সেরা খুঁজুন, এটি সূচী রংগুলির তালিকাতে যুক্ত করুন। নতুন করে শুরু কর.
যোগ লেখক Tatarize, উৎস

এই সমস্যাটিকে রঙ পরিমাপ বলা হয় এবং অনেক সুপরিচিত আলগোরিদিম রয়েছে: http://en.wikipedia.org/ wiki / Color_quantization আমি জানি যারা ভাল প্রভাব অক্টরি পদ্ধতিটি বাস্তবায়িত

0
যোগ

এন সর্বাধিক দূরবর্তী রং একটি 3-মাত্রিক (রঙ) স্থান ভাল-বিতরণ পয়েন্ট একটি সেট বিবেচনা করা যেতে পারে। যদি আপনি একটি Halton ক্রম থেকে তাদের জেনারেট করতে পারেন, তবে কোন উপসর্গ (প্রথম এম রং) এছাড়াও ভাল-বিতরণ পয়েন্ট নিয়ে গঠিত।

0
যোগ
  1. দুটি তালিকা দিয়ে শুরু করুন। প্রার্থী কলেরা, যা প্রাথমিকভাবে আপনার স্বতন্ত্র রং এবং SortedColors রয়েছে, যা প্রাথমিকভাবে খালি।
  2. কোনও রং নির্বাচন করুন এবং এটি প্রার্থীদলের কাছ থেকে অপসারণ করুন এবং এটি সাজানো কলরেটগুলিতে রাখুন। এটি প্রথম রঙ এবং সবচেয়ে সাধারণ হবে, তাই এটি আপনার অ্যাপ্লিকেশনের সাথে ভালভাবে একটি রঙ বেছে নিতে ভাল জায়গা।
  3. প্রার্থীর প্রতি রঙের জন্য তার মোট দূরত্ব গণনা করা। SortedColors মধ্যে প্রতিটি রং CandidateColor থেকে দূরত্ব যোগফল মোট পরিমাণ।
  4. CandidateColors থেকে বৃহত্তম সর্বমোট দূরত্বের সাথে রঙ সরান এবং SortedColors শেষে এটি যোগ করুন।
  5. যদি প্রার্থীকে কলঙ্ক করা না থাকে, তাহলে পদক্ষেপ 3 এ ফিরে যান।

এই লোভী এলগরিদম আপনাকে ভাল ফলাফল দিতে হবে।

0
যোগ