আরজিবি রঙের উজ্জ্বলতা নির্ধারণের জন্য সূত্র


387

আরজিবি মান অনুসারে কোনও রঙের উজ্জ্বলতা নির্ধারণ করতে আমি একধরণের সূত্র বা অ্যালগরিদম খুঁজছি। আমি জানি এটি আরজিবি মানগুলি একসাথে যুক্ত করার চেয়ে বেশি পরিমাণে উজ্জ্বল হতে পারে না তবে কোথা থেকে শুরু করব তা সম্পর্কে আমি ক্ষতির মধ্যে আছি।


8
অনুভূত উজ্জ্বলতা যা আমি মনে করি আমি যা খুঁজছি, ধন্যবাদ।
রবর্মিকা

2
তত্ত্ব এবং কোড উভয় (সি #) সহ রঙের স্পেস এবং তাদের মধ্যে কথোপকথন সম্পর্কে একটি ভাল নিবন্ধ ( .NET - পার্ট 1 এ রঙ ম্যানিপুলেটিং ) রয়েছে। নিবন্ধে মডেল বিষয়গুলির মধ্যে রূপান্তরটির উত্তরের জন্য দেখুন ।
আন্ডারস্কোর

4
আমি অনেক বছর ধরে একজন সদস্য হয়েছি এবং এর আগে কখনও এটি করিনি। আমি কি প্রস্তাব দিতে পারি যে আপনি উত্তরগুলি পর্যালোচনা করুন এবং কোনটি গ্রহণ করবেন তা পুনরায় চিন্তা করতে পারেন?
জীভ ড্যাডসন

উত্তর:


455

আপনি কি উজ্জ্বলতা বলতে চান? উজ্জ্বলতা অনুধাবন? লুমিন্যান্স?

  • আলোকসজ্জা (নির্দিষ্ট রঙের জায়গাগুলির জন্য মান): (0.2126*R + 0.7152*G + 0.0722*B) [1]
  • আলোকসজ্জা (অনুমিত বিকল্প 1): (0.299*R + 0.587*G + 0.114*B) [2]
  • আলোকসজ্জা (অনুমানযোগ্য বিকল্প 2, গণনা করতে ধীর): sqrt( 0.241*R^2 + 0.691*G^2 + 0.068*B^2 )sqrt( 0.299*R^2 + 0.587*G^2 + 0.114*B^2 )( @ ম্যাথহেহবার্স্টকে ধন্যবাদ ) [3]

26
লক্ষ করুন যে এগুলি উভয়ই শারীরবৃত্তীয় দিকগুলিকে জোর দেয়: মানব চোখের বল সবুজ আলোতে সবচেয়ে সংবেদনশীল, কম লাল থেকে কম এবং নীল থেকে কম।
বব ক্রস

16
আরও মনে রাখবেন যে এগুলি সমস্তই সম্ভবত লিনিয়ার 0-1 আরজিবি এর জন্য এবং আপনার সম্ভবত গামা-সংশোধন 0-255 আরজিবি। তারা যেমন ভেবেছিল সেগুলি রূপান্তরিত হয় না।
অলৌকিক আজব

4
সঠিক না. রৈখিক রূপান্তর প্রয়োগের আগে, প্রথমে রঙের জায়গার জন্য গ্যামা ফাংশনের বিপরীতটি প্রয়োগ করতে হবে। তারপরে লিনিয়ার ফাংশন প্রয়োগের পরে, গামা ফাংশন প্রয়োগ করা হয়।
জিভ ড্যাডসন

6
শেষ সূত্রে এটি (0.2.99 * আর) 2 ডলার বা এটি 0.299 * (আর ^ 2)?
কাইজার সোজয়

3
@ কাইজারসোজে যেমন এটি এখানে লেখা হয়েছে এর অর্থ হবে 0.299*(R^2)(কারণ
ক্ষয়টি

298

আমি মনে করি আপনি যা খুঁজছেন তা হ'ল আরজিবি -> লুমা রূপান্তর সূত্র।

ফটোমেট্রিক / ডিজিটাল আইটিইউ বিটি.709 :

Y = 0.2126 R + 0.7152 G + 0.0722 B

ডিজিটাল আইটিইউ বিটি.601 (আর এবং বি উপাদানগুলিকে আরও ওজন দেয়):

Y = 0.299 R + 0.587 G + 0.114 B

আপনি যদি পারফমেন্সের জন্য নির্ভুলতার জন্য বাণিজ্য করতে ইচ্ছুক হন তবে এটির জন্য দুটি আনুমানিক সূত্র রয়েছে:

Y = 0.33 R + 0.5 G + 0.16 B

Y = 0.375 R + 0.5 G + 0.125 B

এগুলি হিসাবে দ্রুত গণনা করা যায়

Y = (R+R+B+G+G+G)/6

Y = (R+R+R+B+G+G+G+G)>>3

47
আমি পছন্দ করি যে আপনি সুনির্দিষ্ট মান রেখেছেন তবে দ্রুত "ক্লোজ যথেষ্ট" টাইপ শর্টকাটও অন্তর্ভুক্ত করেছেন। +1 টি।
বেসকা

3
@ জোনাথন ডুমাইন - দুটি দ্রুত গণনার সূত্রের মধ্যে উভয়ই নীল রঙের অন্তর্ভুক্ত - প্রথমটি হ'ল (2 * লাল + Blue+ 3 * সবুজ) / 6, দ্বিতীয়টি হ'ল (3 * লাল + Blue+ 4 * সবুজ) >> 3। মঞ্জুরিপ্রাপ্ত, দ্রুত উভয় অনুমানের মধ্যে, নীলের ওজন সবচেয়ে কম, তবে এটি এখনও রয়েছে।
ফ্রেঞ্চি পেনভ

84
@ জোনাথনডুমাইন এটি কারণ মানুষের চোখ নীলের কাছে কমপক্ষে
উপলব্ধিযোগ্য

4
দ্রুত সংস্করণটি ভাল কাজ করে। হাজার হাজার ব্যবহারকারীর সাথে বাস্তব-বিশ্ব অ্যাপ্লিকেশনটিতে পরীক্ষিত এবং প্রয়োগ হয়েছে, সবকিছু ঠিক আছে।
milosmns

10
দ্রুত সংস্করণটি আরও দ্রুত করা যদি আপনি এটি করেন তবে: Y = (R<<1+R+G<<2+B)>>3(এআরএম-তে কেবলমাত্র 3-4 সিপিইউ চক্র থাকে) তবে আমার ধারণা একটি ভাল সংকলক আপনার জন্য সেই অপ্টিমাইজেশনটি করবে।
rjmunro

105

আমি গৃহীত উত্তরে তিনটি অ্যালগরিদমের তুলনা করেছি। আমি চক্রটিতে এমন রঙ তৈরি করেছি যেখানে প্রতি 400 তম রঙ ব্যবহৃত হত। প্রতিটি রঙ 2x2 পিক্সেল দ্বারা প্রতিনিধিত্ব করা হয়, রঙগুলি অন্ধকার থেকে হালকা (বাম থেকে ডানদিকে, নীচে থেকে নীচে) সাজানো হয়।

1 ম ছবি - আলোকসজ্জা (আপেক্ষিক)

0.2126 * R + 0.7152 * G + 0.0722 * B

২ য় ছবি - http://www.w3.org/TR/AERT#color-contrast

0.299 * R + 0.587 * G + 0.114 * B

তৃতীয় ছবি - এইচএসপি রঙের মডেল

sqrt(0.299 * R^2 + 0.587 * G^2 + 0.114 * B^2)

চতুর্থ ছবি - ডাব্লুসিএজি 2.0 এসসি 1.4.3 আপেক্ষিক লুমিন্যান্স এবং বিপরীতে অনুপাতের সূত্র ( @ সিঙ্ক্রোর উত্তর এখানে দেখুন )

প্যাটার্নটি কখনও কখনও এক সারিতে রঙের সংখ্যার উপর নির্ভর করে 1 ম এবং 2 য় চিত্রে দাগ দেওয়া যায়। আমি তৃতীয় বা চতুর্থ অ্যালগরিদম থেকে ছবিতে কোনও প্যাটার্নটি স্পট করি না।

যদি আমাকে বেছে নিতে হয় আমি 3 নম্বর অ্যালগরিদমের সাথে যাব কারণ এটি প্রয়োগ করা অনেক সহজ এবং এটি 4 এর চেয়ে প্রায় 33% দ্রুত।

উজ্জ্বলতা অ্যালগরিদমের তুলনা অনুধাবন করা হয়েছে


3
আমার কাছে এটি সর্বোত্তম উত্তর কারণ ওয়ু একটি চিত্রের প্যাটার্ন ব্যবহার করে যা আপনাকে বুঝতে দেয় যে বিভিন্ন বর্ণচাঁদ একইভাবে আলোকিত করা হয়েছে কিনা। আমার এবং আমার বর্তমান মনিটরের জন্য তৃতীয় চিত্রটি "সেরা চেহারা" কারণ এটি চতুর্থটি তত দ্রুত যা এটি একটি প্লাস
কোফডেভেলার

8
আপনার তুলনা চিত্রটি ভুল কারণ আপনি সমস্ত ফাংশনে সঠিক ইনপুট সরবরাহ করেন নি। প্রথম ফাংশনের জন্য রৈখিক আরজিবি ইনপুট প্রয়োজন; আমি কেবল ননলাইনার (অর্থাত গামা-সংশোধন) আরজিবি সরবরাহ করে ব্যান্ডিং এফেক্টটি পুনরুত্পাদন করতে পারি । এই সমস্যাটি সংশোধন করে, আপনি কোনও ব্যান্ডিং শৈল্পিকাগুলি পাবেন না এবং 1 ম ফাংশনটি পরিষ্কার বিজয়ী।
সর্বোচ্চ

1
@ ম্যাক্স ^2এবং sqrtতৃতীয় সূত্রে অন্তর্ভুক্ত হ'ল লিনিয়ার আরজিবি নন-লিনিয়ার আরজিবি এর পরিবর্তে আরজিবি আনার আরও দ্রুততর উপায় ^2.2এবং ^(1/2.2)এটি আরও সঠিক হবে। দুর্ভাগ্যক্রমে রৈখিকের পরিবর্তে অলৈখিক ইনপুট ব্যবহার করা অত্যন্ত সাধারণ।
মার্ক র্যানসম

53

ব্রাউজার ইত্যাদিতে ব্যবহৃত গ্রাস্কেলে রূপান্তরিত করার জন্য কেবলমাত্র এসআরজিবি চিত্রগুলি রূপান্তর করার জন্য নীচে কেবল সঠিক আলগোরিদম রয়েছে।

অভ্যন্তরীণ পণ্যটি গণনা করার আগে রঙের জায়গার জন্য গামা ফাংশনের একটি বিপরীত প্রয়োগ করা প্রয়োজন। তারপরে আপনি হ্রাসকৃত মানটিতে গামা ফাংশন প্রয়োগ করুন। গামা ফাংশন অন্তর্ভুক্ত করতে ব্যর্থ হওয়ার ফলে 20% পর্যন্ত ত্রুটি হতে পারে।

সাধারণ কম্পিউটার স্টাফের জন্য রঙের স্থানটি এসআরজিবি। এসআরজিবি-র জন্য সঠিক সংখ্যাগুলি প্রায়। 0.21, 0.72, 0.07। এসআরজিবি এর জন্য গামা একটি যৌগিক ফাংশন যা 1 / (2.2) দ্বারা ঘনিষ্ঠতার প্রায় কাছাকাছি হয়। সি ++ তে পুরো জিনিস এখানে।

// sRGB luminance(Y) values
const double rY = 0.212655;
const double gY = 0.715158;
const double bY = 0.072187;

// Inverse of sRGB "gamma" function. (approx 2.2)
double inv_gam_sRGB(int ic) {
    double c = ic/255.0;
    if ( c <= 0.04045 )
        return c/12.92;
    else 
        return pow(((c+0.055)/(1.055)),2.4);
}

// sRGB "gamma" function (approx 2.2)
int gam_sRGB(double v) {
    if(v<=0.0031308)
        v *= 12.92;
    else 
        v = 1.055*pow(v,1.0/2.4)-0.055;
    return int(v*255+0.5); // This is correct in C++. Other languages may not
                           // require +0.5
}

// GRAY VALUE ("brightness")
int gray(int r, int g, int b) {
    return gam_sRGB(
            rY*inv_gam_sRGB(r) +
            gY*inv_gam_sRGB(g) +
            bY*inv_gam_sRGB(b)
    );
}

5
এসআরজিবি সংজ্ঞায়িত করার ঠিক এটাই। আমি মনে করি এর কারণটি এটি শূন্যের কাছাকাছি কিছু সংখ্যক সমস্যা এড়িয়ে চলে। আপনি যদি কেবল সংখ্যাটি ২.২ এবং ১ / ২.২-তে বাড়িয়ে দেন তবে এটি খুব বেশি পার্থক্য করবে না।
জীভ ড্যাডসন

8
জেএমডি - একটি ভিজ্যুয়াল উপলব্ধি ল্যাবটিতে কাজের অংশ হিসাবে, আমি সিআরটি মনিটরের উপর সরাসরি আলোকসজ্জা পরিমাপ করেছি এবং নিশ্চিত করতে পারি যে মানগুলির সীমার নীচে লুমিন্যান্সের একটি রৈখিক অঞ্চল রয়েছে।
জেরি ফেডারস্পিল

2
আমি জানি এটি খুব পুরানো, তবে এটি অনুসন্ধানের বাইরে এখনও আছে। আমি মনে করি না এটি সঠিক হতে পারে। ধূসর (255,255,255) = ধূসর (255,0,0) + ধূসর (0,255,0) + ধূসর (0,0,255) হওয়া উচিত নয়? এটা হয় না।
ডিসিবিলেন 6'15

2
@ ডিডিবিলেন: না, যেহেতু মানগুলি অ-লিনিয়ার গামা-সংশোধিত এসআরজিবি স্থানের মধ্যে রয়েছে, আপনি কেবল সেগুলি যুক্ত করতে পারবেন না। আপনি যদি এগুলি যুক্ত করতে চান তবে gam_sRGB কল করার আগে আপনার এটি করা উচিত।
আরডিবি

1
@ ডিডিবিলেন আরডিবি সঠিক। এগুলিকে যুক্ত করার উপায়টি ফাংশনটি ইন ধূসর (ইন্ট আর, ইন জি, ইনট বি) এ দেখানো হয়েছে যা গ্যাম_সআরজিবি "কল করে"। এটি আমাকে কষ্ট দেয় যে চার বছর পরে, সঠিক উত্তরটি এত নীচে রেট দেওয়া হয়েছে। :-) আসলে না .. আমি এটি শেষ করব।
জীভ ড্যাডসন

45

"স্বীকৃত" উত্তরটি ভুল এবং অসম্পূর্ণ

কেবলমাত্র সঠিক উত্তরগুলি হ'ল জিভ-ড্যাডসন এবং @ অ্যাডিংটোনসনকি উত্তরগুলি এবং সমর্থন হিসাবে @ নীল-পিপেনব্রিন্ক । অন্যান্য উত্তর (স্বীকৃত সহ) লিঙ্কগুলি বা উত্সগুলিকে উদ্ধৃত করে যা ভুল, অপ্রাসঙ্গিক, অপ্রচলিত বা ভাঙা।

সংক্ষেপে:

  • এসআরজিবি অবশ্যই লাইনরেইজড হতে হবে প্রয়োগ করার আগে ।
  • আলোকসজ্জা (এল বা ওয়াই) হালকা হিসাবে লিনিয়ার।
  • অনুভূত লাইটনেস (এল *) হ'ল ননলাইনার যেমন মানুষের উপলব্ধি।
  • এইচএসভি এবং এইচএসএল উপলব্ধির দিক থেকেও দূরবর্তীভাবে সঠিক নয়।
  • এসআরজিবি-র জন্য আইইসি স্ট্যান্ডার্ড 0.04045 এর প্রান্তিক নির্দিষ্ট করে এটি 0.03928 নয় (এটি একটি অপ্রচলিত প্রাথমিক খসড়া থেকে ছিল)।
  • ইউক্যালিডিয়ান দূরত্বে দরকারী (যেমন উপলব্ধি সম্পর্কিত) , সিআইইএলবিএব হিসাবে যথার্থভাবে অভিন্ন কার্তেসিয়ান ভেক্টর স্থান প্রয়োজন। এসআরজিবি এক নয়।

নিম্নলিখিতটি একটি সঠিক এবং সম্পূর্ণ উত্তর:

যেহেতু এই থ্রেডটি অনুসন্ধান ইঞ্জিনগুলিতে সর্বাধিক উপস্থিত রয়েছে, তাই আমি এই বিষয়টি সম্পর্কিত বিভিন্ন ভ্রান্ত ধারণা পরিষ্কার করার জন্য যুক্ত করছি।

উজ্জ্বলতা একটি উপলব্ধিযোগ্য গুণ, এটির সরাসরি মাপকাঠি নেই।

অনুভূত লঘিমা যেমন CIELAB কিছু দৃষ্টি মডেল দ্বারা পরিমাপ করা হয়, এখানে এল * (Lstar) একটি পরিমাপ প্রতক্ষ্যজ লঘিমা , এবং অ রৈখিক মানুষের দৃষ্টি অ রৈখিক প্রতিক্রিয়া বক্ররেখা আনুমানিক হয়।

লুমিন্যান্স আলোর একটি রৈখিক পরিমাপ, বর্ণালী স্বাভাবিক দৃষ্টি জন্য ভরযুক্ত কিন্তু লঘিমা অ-রৈখিক উপলব্ধি জন্য স্থায়ী নয়।

লুমা ( ইয়াই প্রাইম) এমন একটি গামা এনকোডড , কিছু ভিডিও এনকোডিংগুলিতে ব্যবহৃত ওজনযুক্ত সংকেত। রৈখিক আলোকসজ্জা দিয়ে এটি বিভ্রান্ত হওয়ার দরকার নেই।

গামা বা ট্রান্সফার কার্ভ (টিআরসি) একটি বাঁক যা প্রায়শই উপলব্ধিযোগ্য বক্রের মতো হয় এবং সাধারণত স্টোরেজ বা সম্প্রচারের জন্য চিত্রের ডেটাতে অনুভূত শব্দটি হ্রাস করতে এবং / অথবা ডেটা ব্যবহার (এবং সম্পর্কিত কারণে) উন্নত করে is

অনুমিত হালকাতা নির্ধারণের জন্য , প্রথমে গামা এনকোডেড রাগবি চিত্র চিত্রকে লিনিয়ার লুমিন্যান্স ( Lবা Y) এবং তারপরে অ-লিনিয়ার অনুভূত লাইটনেসে রূপান্তর করুন ( L*)


আলোকপাত খুঁজে পেতে:

... কারণ দৃশ্যত এটি কোথাও হারিয়ে গিয়েছিল ...

প্রথম ধাপ:

সমস্ত এসআরজিবি 8 বিট পূর্ণসংখ্যার মানকে দশমিক 0.0-1.0 তে রূপান্তর করুন

  vR = sR / 255;
  vG = sG / 255;
  vB = sB / 255;

ধাপ দুই:

একটি গামা এনকোডেড আরজিবিকে একটি রৈখিক মানে রূপান্তর করুন। উদাহরণস্বরূপ sRGB (কম্পিউটার স্ট্যান্ডার্ড) এর জন্য প্রায় V ^ 2.2 এর পাওয়ার বাঁক দরকার, যদিও "নির্ভুল" রূপান্তরটি হ'ল:

লাইনারে এসআরজিবি

যেখানে V´ হ'ল এসআরজিবি-র গামা-এনকোডেড আর, জি বা বি চ্যানেল।
সুডোকোড:

function sRGBtoLin(colorChannel) {
        // Send this function a decimal sRGB gamma encoded color value
        // between 0.0 and 1.0, and it returns a linearized value.

    if ( colorChannel <= 0.04045 ) {
            return colorChannel / 12.92;
        } else {
            return pow((( colorChannel + 0.055)/1.055),2.4));
        }
    }

পদক্ষেপ তিন:

লুমিন্যান্স (Y) সন্ধানের জন্য এসআরজিবির জন্য মান সহগ প্রয়োগ করুন:

গুণফলগুলি Y = R * 0.2126 + G * 0.7152 + বি * 0.0722 প্রয়োগ করুন

সিউডোকোড উপরের ফাংশনগুলি ব্যবহার করে:

Y = (0.2126 * sRGBtoLin(vR) + 0.7152 * sRGBtoLin(vG) + 0.0722 * sRGBtoLin(vB))

নিয়মিত আলোকপাত করতে:

চতুর্থ ধাপ:

উপরে থেকে আলোকসজ্জা ওয়াই ধরুন এবং এল * তে রূপান্তর করুন

ওয়াই সমীকরণ থেকে এল *
সুডোকোড:

function YtoLstar(Y) {
        // Send this function a luminance value between 0.0 and 1.0,
        // and it returns L* which is "perceptual lightness"

    if ( Y <= (216/24389) {       // The CIE standard states 0.008856 but 216/24389 is the intent for 0.008856451679036
            return Y * (24389/27);  // The CIE standard states 903.3, but 24389/27 is the intent, making 903.296296296296296
        } else {
            return pow(Y,(1/3)) * 116 - 16;
        }
    }

এল * এর মান 0 (কালো) থেকে 100 (সাদা) থেকে 50 যেখানে উপলব্ধি "মাঝারি ধূসর" হয় value এল * = 50 হ'ল ওয়াই = 18.4 এর সমতুল্য, বা অন্য কথায় একটি 18% ধূসর কার্ড যা কোনও ফটোগ্রাফিক এক্সপোজারের মাঝামাঝি করে (অ্যানসেল অ্যাডামস অঞ্চল ভি)।

তথ্যসূত্র:

IEC 61966-2-1:1999 Standard
Wikipedia sRGB
Wikipedia CIELAB
Wikipedia CIEXYZ
চার্লস পোয়েটনের গামা FAQ


@ রোটেম আপনাকে ধন্যবাদ - আমি কিছু অদ্ভুত এবং অসম্পূর্ণ বিবৃতি দেখেছি এবং অনুভব করেছি যে এটি পেরেক বন্ধ করা বিশেষত বিশেষত যেহেতু এই থ্রেডটি অনুসন্ধান ইঞ্জিনগুলিতে খুব বেশি রয়েছে।
Myndex

আমি বিটি.601 লুমা এবং সিআইই 1976 এল * পার্সেপুটিভ গ্রে সাথে তুলনা করে একটি বিক্ষোভ তৈরি করেছি , যাতে কয়েকটি ম্যাটল্যাব কমান্ড ব্যবহার করা হয়েছে:Luma=rgb2gray(RGB);LAB=rgb2lab(RGB);LAB(:,:,2:3)=0;PerceptualGray=lab2rgb(LAB);
রোটেম

@ মাইন্ডেক্স আমি আপনার সূত্রগুলি এল * এ পেতে ব্যবহার করেছি, তবে আমি এখনও কিছু অদ্ভুত ফলাফল পেয়েছি, আমি যে সূত্রটিই ব্যবহার করি না কেন ... আপনার সাথে, # d05858 এর এল * # সি 51c2a এর এল * এর চেয়েও গাer় ... কোনও আছে কি? এই অধিকার পেতে উপায়? কোনও সূত্র প্রত্যাশার মতো কাজ করে না কেন? :(
সজাহান

1
@ এসডফাসডফ্যাডস হ্যাঁ, L*a*b*বেশ কয়েকটি মনোবিজ্ঞানীয় গুণাবলী বিবেচনা করে না। হেলমহোল্টজ-কোহলরউশ ইফেক্ট এক, তবে আরও অনেকগুলি রয়েছে। সিআইএলবি কোনও উপায়ে কোনও "পূর্ণ" চিত্রের মূল্যায়ন মডেল নয়। আমার পোস্টে আমি খুব গভীর মিনটিয়ায় প্রবেশ না করে মূল ধারণাগুলি যথাসম্ভব সম্পূর্ণভাবে কভার করার চেষ্টা করছিলাম। হান্ট মডেল, ফেয়ারচাইল্ডের মডেল এবং অন্যান্যরা আরও সম্পূর্ণ কাজ করে তবে এগুলি যথেষ্ট জটিল।
Myndex

1
@ মাইন্ডেক্স, কিছুই নয়, আমার বাস্তবায়ন ক্লান্তিভিত্তিক ছিল এবং আমার খারাপ ফলাফলগুলি এলো :( আপনার সহায়তা এবং আপনার পোস্টের জন্য যা আপনাকে অনেক মূল্যবান বলে ধন্যবাদ
জানায়

11

আমি এই কোডটি পেয়েছি (সি # তে লিখিত) যা কোনও রঙের "উজ্জ্বলতা" গণনা করার একটি দুর্দান্ত কাজ করে। এই দৃশ্যে কোডটি রঙের উপরে সাদা বা কালো পাঠ্য রাখবেন কিনা তা নির্ধারণের চেষ্টা করছে।


1
এটাই আমার দরকার ছিল। আমি একটি ক্লাসিক "কালার বার" ডেমো করছিলাম, এবং সেরা কালো বা সাদা পছন্দ সহ রঙের উপরে তাদের লেবেল করতে চেয়েছিলাম!
রুফাসভিএস

10

মজার বিষয় হল, আরজিবি => এইচএসভির জন্য এই সূত্রটি কেবলমাত্র v = MAX3 (আর, জি, বি) ব্যবহার করে। অন্য কথায়, আপনি সর্বোচ্চ ব্যবহার করতে পারেন এইচএসভিতে (আর, জি, বি) ভি হিসাবে ।

আমি হ্যারেন এবং বেকারের 575 পৃষ্ঠায় পরীক্ষা করে দেখেছি তারা কীভাবে "মান" গণনা করে।

হর্ন এবং বেকার থেকে 319 পৃষ্ঠা


কেবল রেকর্ডের জন্য লিঙ্কটি মারা গেছে, এখানে সংরক্ষণাগার সংস্করণ সংরক্ষণ করুন - web.archive.org/web/20150906055359/http://…
পিটার

এইচএসভি অনুধাবনভাবে অভিন্ন নয় (এবং এটি এমনকি খুব কাছাকাছিও নয়)। রঙটি সামঞ্জস্য করার জন্য এটি কেবল "সুবিধাজনক" উপায় হিসাবে ব্যবহৃত হয় তবে এটি উপলব্ধির সাথে প্রাসঙ্গিক নয় এবং ভিটি এল বা ওয়াইয়ের (সিআইই লুমিন্যান্স) সত্যিকারের সাথে সম্পর্কিত নয়।
Myndex

9

এখানে উল্লিখিত সূত্রগুলির এলোমেলো নির্বাচনের মধ্যে হারিয়ে যাওয়ার পরিবর্তে, আমি আপনাকে W3C মান দ্বারা প্রস্তাবিত সূত্রটি অনুসরণ করার পরামর্শ দিচ্ছি।

এখানে ডাব্লুসিএজি ২.০ এসসি ১.৪.৩ আপেক্ষিক লুমিন্যান্স এবং বিপরীতে অনুপাতের সূত্রগুলির একটি সরল কিন্তু সঠিক পিএইচপি বাস্তবায়ন । এটি এই মানগুলিকে উত্পাদন করে যা ডাব্লুসিএজি সম্মতি জন্য প্রয়োজনীয় অনুপাত মূল্যায়নের জন্য উপযুক্ত, যেমন এই পৃষ্ঠায় , এবং যে কোনও ওয়েব অ্যাপ্লিকেশনের জন্য উপযুক্ত এবং উপযুক্ত। এটি অন্যান্য ভাষাগুলিতে পোর্ট করার ক্ষেত্রে তুচ্ছ।

/**
 * Calculate relative luminance in sRGB colour space for use in WCAG 2.0 compliance
 * @link http://www.w3.org/TR/WCAG20/#relativeluminancedef
 * @param string $col A 3 or 6-digit hex colour string
 * @return float
 * @author Marcus Bointon <marcus@synchromedia.co.uk>
 */
function relativeluminance($col) {
    //Remove any leading #
    $col = trim($col, '#');
    //Convert 3-digit to 6-digit
    if (strlen($col) == 3) {
        $col = $col[0] . $col[0] . $col[1] . $col[1] . $col[2] . $col[2];
    }
    //Convert hex to 0-1 scale
    $components = array(
        'r' => hexdec(substr($col, 0, 2)) / 255,
        'g' => hexdec(substr($col, 2, 2)) / 255,
        'b' => hexdec(substr($col, 4, 2)) / 255
    );
    //Correct for sRGB
    foreach($components as $c => $v) {
        if ($v <= 0.04045) {
            $components[$c] = $v / 12.92;
        } else {
            $components[$c] = pow((($v + 0.055) / 1.055), 2.4);
        }
    }
    //Calculate relative luminance using ITU-R BT. 709 coefficients
    return ($components['r'] * 0.2126) + ($components['g'] * 0.7152) + ($components['b'] * 0.0722);
}

/**
 * Calculate contrast ratio acording to WCAG 2.0 formula
 * Will return a value between 1 (no contrast) and 21 (max contrast)
 * @link http://www.w3.org/TR/WCAG20/#contrast-ratiodef
 * @param string $c1 A 3 or 6-digit hex colour string
 * @param string $c2 A 3 or 6-digit hex colour string
 * @return float
 * @author Marcus Bointon <marcus@synchromedia.co.uk>
 */
function contrastratio($c1, $c2) {
    $y1 = relativeluminance($c1);
    $y2 = relativeluminance($c2);
    //Arrange so $y1 is lightest
    if ($y1 < $y2) {
        $y3 = $y1;
        $y1 = $y2;
        $y2 = $y3;
    }
    return ($y1 + 0.05) / ($y2 + 0.05);
}

আপনি w3c সংজ্ঞা কেন পছন্দ করবেন? ব্যক্তিগতভাবে আমি সিসিআইআর 601 উভয়ই প্রয়োগ করেছি এবং
ডাব্লু

1
কারণ, যেমনটি আমি বলেছি, এটি ডাব্লু 3 সি এবং ডাব্লুসিএজি উভয়ই দ্বারা প্রস্তাবিত?
সিঙ্ক্রো

1
ডাব্লু 3 সি সূত্রটি বেশ কয়েকটি স্তরে ভুল। এটি মানুষের উপলব্ধি বিবেচনায় নিচ্ছে না, তারা লিমিন্যান্স ব্যবহার করে "সাধারণ" বিপরীতে ব্যবহার করছে যা লিনিয়ার এবং বোধগম্য অভিন্ন নয়। অন্যান্য জিনিসের মধ্যে, এটি প্রদর্শিত হয় যে তারা 1988 (!!!) হিসাবে পুরানো কিছু মানের ভিত্তিতে এটি ভিত্তিক করেছে যা আজ প্রাসঙ্গিক নয় (সেই মানগুলি সবুজ / কালো হিসাবে একরঙা মনিটরের উপর ভিত্তি করে ছিল এবং সম্পূর্ণ বিপরীতে উল্লেখ করা থেকে শুরু করে) , গ্রেস্কেল বা রঙ বিবেচনা না করে)।
Myndex

1
এটা সম্পূর্ণ আবর্জনা। লুমা বিশেষভাবে উপলব্ধিযোগ্য - সে কারণেই এর লাল, সবুজ এবং নীল রঙের জন্য বিভিন্ন সহগ রয়েছে। বয়সের সাথে এর কোনও সম্পর্ক নেই - দুর্দান্ত সিআইই ল্যাব অনুধাবনযোগ্য রঙ স্পেসের তারিখ 1976। ডাব্লু 3 সি স্থানটি তেমন ভাল নয়, তবে এটি একটি ভাল ব্যবহারিক অনুমান যা গণনা করা সহজ। আপনার যদি প্রস্তাব দেওয়ার মতো কিছু গঠনমূলক থাকে তবে খালি সমালোচনার পরিবর্তে পোস্ট করুন।
সিঙ্ক্রো

3
কেবল যোগ / আপডেট করতে : আমরা বর্তমানে প্রতিস্থাপন অ্যালগরিদমগুলি নিয়ে আরও ভাল মডেল অনুধাবনকারী বৈপরীত্য (গিথুব সংখ্যা 695-তে আলোচনা) নিয়ে গবেষণা করছি । তবে, পৃথক ইস্যু হিসাবে FYI এসআরজিবি এর প্রান্তিকতা 0.04045 , এবং 0.03928 নয় যা একটি অপ্রচলিত প্রারম্ভিক sRGB খসড়া থেকে উল্লেখ করা হয়েছিল। অনুমোদিত আইসিডি স্ট্যান্ডার্ড 0.04045 ব্যবহার করে এবং ডাব্লুসিএজি-তে এই ত্রুটিটি সংশোধন করার জন্য একটি অনুরোধের অনুরোধ আসছে। (রেফ: আইইসি 61966-2-1: 1999) এটি গিথুব ইস্যুতে 360, যদিও উল্লেখ করার জন্য, 8 বিটের মধ্যে কোনও আসল পার্থক্য নেই - থ্রেড 360 এর শেষের দিকে আমার কাছে 8 বিটের মধ্যে 0.04045 / 0.03928 সহ ত্রুটির চার্ট রয়েছে।
Myndex

8

অন্যরা যা বলেছিল তা যুক্ত করতে:

এই সমস্ত সমীকরণ অনুশীলনে বেশ ভালভাবে কাজ করে, তবে আপনাকে যদি খুব সুনির্দিষ্ট হতে হয় তবে আপনাকে প্রথমে রঙকে রৈখিক রঙের স্থানগুলিতে রূপান্তর করতে হবে (বিপরীত চিত্র-গামা প্রয়োগ করুন), প্রাথমিক রঙগুলির ওজন গড় করতে হবে এবং - যদি আপনি চান রঙটি প্রদর্শন করুন - মনিটরের গামায় ফিরে আসুন umin

গাam়াকে উপেক্ষা করা এবং সঠিক গামা করার মধ্যে আলোকিত পার্থক্য অন্ধকার গ্রেতে 20% অবধি is


2

আমি আজ জাভাস্ক্রিপ্টে একই ধরণের কাজটি সমাধান করছিলাম। আমি getPerceivedLightness(rgb)এইচএক্স আরজিবি রঙের জন্য এই ফাংশনটিতে স্থির হয়েছি । এটি হিউমহোল্টজ-কোহলরউশ ইফেক্টের সাথে ফেয়ারচাইল্ড এবং পেরোটিটা ফর্মুলার মাধ্যমে লুমিন্যান্স সংশোধনের জন্য ডিল করে।

/**
 * Converts RGB color to CIE 1931 XYZ color space.
 * https://www.image-engineering.de/library/technotes/958-how-to-convert-between-srgb-and-ciexyz
 * @param  {string} hex
 * @return {number[]}
 */
export function rgbToXyz(hex) {
    const [r, g, b] = hexToRgb(hex).map(_ => _ / 255).map(sRGBtoLinearRGB)
    const X =  0.4124 * r + 0.3576 * g + 0.1805 * b
    const Y =  0.2126 * r + 0.7152 * g + 0.0722 * b
    const Z =  0.0193 * r + 0.1192 * g + 0.9505 * b
    // For some reason, X, Y and Z are multiplied by 100.
    return [X, Y, Z].map(_ => _ * 100)
}

/**
 * Undoes gamma-correction from an RGB-encoded color.
 * https://en.wikipedia.org/wiki/SRGB#Specification_of_the_transformation
 * /programming/596216/formula-to-determine-brightness-of-rgb-color
 * @param  {number}
 * @return {number}
 */
function sRGBtoLinearRGB(color) {
    // Send this function a decimal sRGB gamma encoded color value
    // between 0.0 and 1.0, and it returns a linearized value.
    if (color <= 0.04045) {
        return color / 12.92
    } else {
        return Math.pow((color + 0.055) / 1.055, 2.4)
    }
}

/**
 * Converts hex color to RGB.
 * /programming/5623838/rgb-to-hex-and-hex-to-rgb
 * @param  {string} hex
 * @return {number[]} [rgb]
 */
function hexToRgb(hex) {
    const match = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)
    if (match) {
        match.shift()
        return match.map(_ => parseInt(_, 16))
    }
}

/**
 * Converts CIE 1931 XYZ colors to CIE L*a*b*.
 * The conversion formula comes from <http://www.easyrgb.com/en/math.php>.
 * https://github.com/cangoektas/xyz-to-lab/blob/master/src/index.js
 * @param   {number[]} color The CIE 1931 XYZ color to convert which refers to
 *                           the D65/2° standard illuminant.
 * @returns {number[]}       The color in the CIE L*a*b* color space.
 */
// X, Y, Z of a "D65" light source.
// "D65" is a standard 6500K Daylight light source.
// https://en.wikipedia.org/wiki/Illuminant_D65
const D65 = [95.047, 100, 108.883]
export function xyzToLab([x, y, z]) {
  [x, y, z] = [x, y, z].map((v, i) => {
    v = v / D65[i]
    return v > 0.008856 ? Math.pow(v, 1 / 3) : v * 7.787 + 16 / 116
  })
  const l = 116 * y - 16
  const a = 500 * (x - y)
  const b = 200 * (y - z)
  return [l, a, b]
}

/**
 * Converts Lab color space to Luminance-Chroma-Hue color space.
 * http://www.brucelindbloom.com/index.html?Eqn_Lab_to_LCH.html
 * @param  {number[]}
 * @return {number[]}
 */
export function labToLch([l, a, b]) {
    const c = Math.sqrt(a * a + b * b)
    const h = abToHue(a, b)
    return [l, c, h]
}

/**
 * Converts a and b of Lab color space to Hue of LCH color space.
 * /programming/53733379/conversion-of-cielab-to-cielchab-not-yielding-correct-result
 * @param  {number} a
 * @param  {number} b
 * @return {number}
 */
function abToHue(a, b) {
    if (a >= 0 && b === 0) {
        return 0
    }
    if (a < 0 && b === 0) {
        return 180
    }
    if (a === 0 && b > 0) {
        return 90
    }
    if (a === 0 && b < 0) {
        return 270
    }
    let xBias
    if (a > 0 && b > 0) {
        xBias = 0
    } else if (a < 0) {
        xBias = 180
    } else if (a > 0 && b < 0) {
        xBias = 360
    }
    return radiansToDegrees(Math.atan(b / a)) + xBias
}

function radiansToDegrees(radians) {
    return radians * (180 / Math.PI)
}

function degreesToRadians(degrees) {
    return degrees * Math.PI / 180
}

/**
 * Saturated colors appear brighter to human eye.
 * That's called Helmholtz-Kohlrausch effect.
 * Fairchild and Pirrotta came up with a formula to
 * calculate a correction for that effect.
 * "Color Quality of Semiconductor and Conventional Light Sources":
 * https://books.google.ru/books?id=ptDJDQAAQBAJ&pg=PA45&lpg=PA45&dq=fairchild+pirrotta+correction&source=bl&ots=7gXR2MGJs7&sig=ACfU3U3uIHo0ZUdZB_Cz9F9NldKzBix0oQ&hl=ru&sa=X&ved=2ahUKEwi47LGivOvmAhUHEpoKHU_ICkIQ6AEwAXoECAkQAQ#v=onepage&q=fairchild%20pirrotta%20correction&f=false
 * @return {number}
 */
function getLightnessUsingFairchildPirrottaCorrection([l, c, h]) {
    const l_ = 2.5 - 0.025 * l
    const g = 0.116 * Math.abs(Math.sin(degreesToRadians((h - 90) / 2))) + 0.085
    return l + l_ * g * c
}

export function getPerceivedLightness(hex) {
    return getLightnessUsingFairchildPirrottaCorrection(labToLch(xyzToLab(rgbToXyz(hex))))
}

1

এইচএসভি রঙের স্থানটি কৌশলটি করা উচিত, উইকিপিডিয়া নিবন্ধটি দেখুন আপনি যে ভাষাতে কাজ করছেন তার উপর নির্ভর করে একটি গ্রন্থাগার রূপান্তর পেতে পারে।

এইচ হিউ যা রঙের জন্য একটি সংখ্যাসূচক মান (যেমন লাল, সবুজ ...)

এস হ'ল রঙের পরিপূর্ণতা, অর্থাৎ এটি কতটা 'তীব্র'

ভি হ'ল রঙের 'উজ্জ্বলতা'।


7
এইচএসভি রঙের জায়গার সাথে সমস্যা হ'ল নীল এবং হলুদ রঙের জন্য আপনার একই স্যাচুরেশন এবং মান থাকতে পারে তবে ভিন্ন ভিন্ন রঙ থাকতে পারে । হলুদ নীল থেকে অনেক উজ্জ্বল। একই এইচএসএল জন্য যায়।
ইয়ান বয়ড

এইচএসভি আপনাকে প্রযুক্তিগত দিক থেকে একটি রঙের "উজ্জ্বলতা" দেয়। একটি ধারণাগত উজ্জ্বলতায় এইচএসভি সত্যিই ব্যর্থ হয়
ব্যবহারকারীর 151496

এইচএসভি এবং এইচএসএল উপলব্ধিগতভাবে সঠিক নয় (এবং এটি এমনকি খুব কাছাকাছিও নয়)। এগুলি আপেক্ষিক রঙ সামঞ্জস্য করার জন্য "নিয়ন্ত্রণ" এর জন্য দরকারী, তবে অনুধাবনযোগ্য স্বল্পতার সঠিক ভবিষ্যদ্বাণী হিসাবে নয়। ধারণাগত স্বল্পতার জন্য সিআইইএলবি থেকে এল * ব্যবহার করুন।
Myndex

1

আরজিবি লুমিন্যান্স মান = 0.3 আর + 0.59 জি + 0.11 বি

http://www.scantips.com/lumin.html

আপনি যদি সাদাটির কাছাকাছি রঙের সন্ধান করছেন তবে আপনি ইউক্লিডিয়ান দূরত্বটি ব্যবহার করতে পারেন (255, 255, 255)

আমি মনে করি আরজিবি রঙের স্থানটি এল 2 ইউক্যালিডিয়ান দূরত্বের সাথে সম্মতিজনকভাবে অ-ইউনিফর্ম। ইউনিফর্ম স্পেস সিআইই ল্যাব এবং এলইউভি অন্তর্ভুক্ত।


1

জাভ ড্যাডসনের বিপরীত-গামা সূত্রটি জাভাস্ক্রিপ্টে প্রয়োগ করার সময় অর্ধ-সামঞ্জস্য করা সরিয়ে ফেলতে হবে, অর্থাৎ ফাংশন gam_sRGB থেকে রিটার্ন রিটার্ন করতে হবে (v * 255); ইনট রিটার্ন করবেন না (v * 255 + .5); অর্ধ-সামঞ্জস্য চূড়ান্ত হয়, এবং এটি একটি আর = জি = বি অর্থাৎ ধূসর রঙের ত্রিবারের চেয়ে খুব বেশি মানের কারণ হতে পারে। একটি আর = জি = বি ত্রিয়ার গ্রেস্কেল রূপান্তরটি আর এর সমান মান উত্পন্ন করতে হবে; এটি একটি প্রমাণ যে সূত্রটি বৈধ। কর্ম সূত্রে গ্রিস্কেলের নাইন শেডগুলি দেখুন (অর্ধ-সামঞ্জস্য না করে)।


দেখে মনে হচ্ছে আপনি নিজের জিনিস জানেন, তাই আমি +0.5
জীভ ড্যাডসন

আমি এক্সপেরিমেন্ট করেছি। সি ++ এ এর ​​+0.5 প্রয়োজন, তাই আমি এটিকে আবার রেখে দিয়েছি other অন্যান্য ভাষায় অনুবাদ করার বিষয়ে আমি একটি মন্তব্য যুক্ত করেছি।
জীভ ড্যাডসন

1

আমি ভাবছি কীভাবে এই আরজিবি সহগগুলি নির্ধারিত হয়েছিল। আমি নিজেই একটি পরীক্ষা করেছি এবং আমি নিম্নলিখিতগুলি দিয়ে শেষ করেছি:

Y = 0.267 R + 0.642 G + 0.091 B

দীর্ঘ তবে প্রতিষ্ঠিত আইটিইউ সহগের চেয়ে ক্লোজ কিন্তু স্পষ্টতই আলাদা। আমি আশ্চর্য হই যে যদি এই গুণাগুণগুলি প্রতিটি পর্যবেক্ষকের জন্য পৃথক হতে পারে, কারণ আমাদের সকলের চোখের রেটিনার উপরে শঙ্কু এবং রড বিভিন্ন পরিমাণে থাকতে পারে এবং বিশেষত বিভিন্ন ধরণের শঙ্কুগুলির মধ্যে অনুপাত পৃথক হতে পারে।

রেফারেন্সের জন্য:

আইটিইউ বিটি.709:

Y = 0.2126 R + 0.7152 G + 0.0722 B

আইটিইউ বিটি.601:

Y = 0.299 R + 0.587 G + 0.114 B

আমি একটি উজ্জ্বল লাল, উজ্জ্বল সবুজ এবং উজ্জ্বল নীল পটভূমিতে একটি ছোট ধূসর দণ্ডটি দ্রুত সরিয়ে এবং যতটা সম্ভব সম্ভব মিশ্রিত না হওয়া পর্যন্ত ধূসর সামঞ্জস্য করে পরীক্ষাটি করেছি। আমি অন্যান্য পরীক্ষার সাথেও সেই পরীক্ষার পুনরাবৃত্তি করেছি। আমি বিভিন্ন ডিসপ্লেতে পরীক্ষার পুনরাবৃত্তি করেছিলাম, এমনকি 3.0 এর স্থায়ী গামা ফ্যাক্টর সহ একটি, তবে এটি আমার কাছে একই দেখাচ্ছে। আরও বেশি, আইটিইউ সহগগুলি আমার চোখের জন্য আক্ষরিক অর্থে ভুল।

এবং হ্যাঁ, আমি সম্ভবত একটি সাধারণ রঙিন দর্শন পেয়েছি।


আপনার পরীক্ষায় আপনি প্রথমে গামা উপাদানটি সরানোর জন্য লিনিয়ারাইজ করেছিলেন? আপনি যদি তা না করেন তবে আপনার ফলাফলগুলি ব্যাখ্যা করতে পারে। তবুও, গুণফলগুলি সিআইই 1931 পরীক্ষাগুলির সাথে সম্পর্কিত এবং সেগুলি গড়ে 17 পর্যবেক্ষক, সুতরাং হ্যাঁ ফলাফলের মধ্যে পৃথক পৃথকতা রয়েছে।
Myndex

1

এখানে সি কোডের একটি বিট যা সঠিকভাবে অনুভূত আলোকসজ্জা গণনা করা উচিত।

// reverses the rgb gamma
#define inverseGamma(t) (((t) <= 0.0404482362771076) ? ((t)/12.92) : pow(((t) + 0.055)/1.055, 2.4))

//CIE L*a*b* f function (used to convert XYZ to L*a*b*)  http://en.wikipedia.org/wiki/Lab_color_space
#define LABF(t) ((t >= 8.85645167903563082e-3) ? powf(t,0.333333333333333) : (841.0/108.0)*(t) + (4.0/29.0))


float
rgbToCIEL(PIXEL p)
{
   float y;
   float r=p.r/255.0;
   float g=p.g/255.0;
   float b=p.b/255.0;

   r=inverseGamma(r);
   g=inverseGamma(g);
   b=inverseGamma(b);

   //Observer = 2°, Illuminant = D65 
   y = 0.2125862307855955516*r + 0.7151703037034108499*g + 0.07220049864333622685*b;

   // At this point we've done RGBtoXYZ now do XYZ to Lab

   // y /= WHITEPOINT_Y; The white point for y in D65 is 1.0

    y = LABF(y);

   /* This is the "normal conversion which produces values scaled to 100
    Lab.L = 116.0*y - 16.0;
   */
   return(1.16*y - 0.16); // return values for 0.0 >=L <=1.0
}

0

উজ্জ্বলতা সংজ্ঞায়িত করুন। আপনি যদি সাদাটির কাছাকাছি রঙের সন্ধান করছেন তবে আপনি ইউক্লিডিয়ান দূরত্বটি ব্যবহার করতে পারেন (255, 255, 255)


1
না, আপনি এসআরজিবি মানগুলির মধ্যে ইউক্যালিডিয়ান দূরত্ব ব্যবহার করতে পারবেন না, এসআরজিবি কোনও অনুমান কার্তেসিয়ান / ভেক্টর স্থান নয়। আপনি যদি রঙের পার্থক্যের পরিমাপ হিসাবে ইউক্লিডিয়ান দূরত্ব ব্যবহার করতে চান তবে আপনাকে কমপক্ষে সিআইএলবিতে রূপান্তর করতে হবে, বা আরও ভাল, CIECAM02 এর মতো একটি সিএএম ব্যবহার করতে হবে।
মাইন্ডেক্স

0

এইচএসভির 'ভি' সম্ভবত আপনি যা খুঁজছেন তা। ম্যাটল্যাবের একটি rgb2hsv ফাংশন রয়েছে এবং পূর্ববর্তী উদ্ধৃত উইকিপিডিয়া নিবন্ধটি সিউডোকোডে পূর্ণ। যদি কোনও আরজিবি 2 এইচএসভি রূপান্তরটি সম্ভব না হয় তবে কম নির্ভুল মডেলটি চিত্রটির গ্রেস্কেল সংস্করণ হবে।


0

এই লিঙ্ক সমস্ত কিছু গভীরতার সাথে ব্যাখ্যা করে, কেন এই গুণক ধ্রুবকগুলি আর, জি এবং বি মানের আগে উপস্থিত রয়েছে।

সম্পাদনা করুন: এখানেও উত্তরগুলির একটিতে এর ব্যাখ্যা রয়েছে (0.299 * আর + 0.587 * জি + 0.114 * বি)


0

আর এর সাথে কোনও রঙের উজ্জ্বলতা নির্ধারণ করতে, আমি আরজিবি সিস্টেমের রঙকে এইচএসভি সিস্টেমের রঙে রূপান্তর করি।

আমার স্ক্রিপ্টে, আমি অন্যান্য কারণে আগে এইচএক্স সিস্টেম কোড ব্যবহার করি তবে আপনি আরজিবি সিস্টেম কোড দিয়েও শুরু করতে পারেন rgb2hsv {grDevices}। ডকুমেন্টেশন এখানে

আমার কোডের এই অংশটি এখানে:

 sample <- c("#010101", "#303030", "#A6A4A4", "#020202", "#010100")
 hsvc <-rgb2hsv(col2rgb(sample)) # convert HEX to HSV
 value <- as.data.frame(hsvc) # create data.frame
 value <- value[3,] # extract the information of brightness
 order(value) # ordrer the color by brightness

0

স্পষ্টতার জন্য, যে সূত্রগুলি বর্গমূল ব্যবহার করে তা হওয়া দরকার

sqrt(coefficient * (colour_value^2))

না

sqrt((coefficient * colour_value))^2

এর প্রমাণ হ'ল গ্রেস্কেল আর-তে একটি আর = জি = বি ত্রিয়ার রূপান্তরিত। এটি কেবলমাত্র সত্য হবে যদি আপনি বর্ণের মান বর্গাকার করেন তবে বর্ণের মান বারের সহগ হয় না। গ্রেস্কেলের নয়টি শেড দেখুন


5
এখানে প্রথম বন্ধনী আছে
লগ 0

আপনি যে সহগ ব্যবহার করেন তা হ'ল সঠিক সহগের বর্গমূল।
রুফাসভিএস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.