আরজিবি মান অনুসারে কোনও রঙের উজ্জ্বলতা নির্ধারণ করতে আমি একধরণের সূত্র বা অ্যালগরিদম খুঁজছি। আমি জানি এটি আরজিবি মানগুলি একসাথে যুক্ত করার চেয়ে বেশি পরিমাণে উজ্জ্বল হতে পারে না তবে কোথা থেকে শুরু করব তা সম্পর্কে আমি ক্ষতির মধ্যে আছি।
আরজিবি মান অনুসারে কোনও রঙের উজ্জ্বলতা নির্ধারণ করতে আমি একধরণের সূত্র বা অ্যালগরিদম খুঁজছি। আমি জানি এটি আরজিবি মানগুলি একসাথে যুক্ত করার চেয়ে বেশি পরিমাণে উজ্জ্বল হতে পারে না তবে কোথা থেকে শুরু করব তা সম্পর্কে আমি ক্ষতির মধ্যে আছি।
উত্তর:
আপনি কি উজ্জ্বলতা বলতে চান? উজ্জ্বলতা অনুধাবন? লুমিন্যান্স?
(0.2126*R + 0.7152*G + 0.0722*B)
[1](0.299*R + 0.587*G + 0.114*B)
[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]0.299*(R^2)
(কারণ
আমি মনে করি আপনি যা খুঁজছেন তা হ'ল আরজিবি -> লুমা রূপান্তর সূত্র।
ফটোমেট্রিক / ডিজিটাল আইটিইউ বিটি.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
Blue
+ 3 * সবুজ) / 6, দ্বিতীয়টি হ'ল (3 * লাল + Blue
+ 4 * সবুজ) >> 3। মঞ্জুরিপ্রাপ্ত, দ্রুত উভয় অনুমানের মধ্যে, নীলের ওজন সবচেয়ে কম, তবে এটি এখনও রয়েছে।
Y = (R<<1+R+G<<2+B)>>3
(এআরএম-তে কেবলমাত্র 3-4 সিপিইউ চক্র থাকে) তবে আমার ধারণা একটি ভাল সংকলক আপনার জন্য সেই অপ্টিমাইজেশনটি করবে।
আমি গৃহীত উত্তরে তিনটি অ্যালগরিদমের তুলনা করেছি। আমি চক্রটিতে এমন রঙ তৈরি করেছি যেখানে প্রতি 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% দ্রুত।
^2
এবং sqrt
তৃতীয় সূত্রে অন্তর্ভুক্ত হ'ল লিনিয়ার আরজিবি নন-লিনিয়ার আরজিবি এর পরিবর্তে আরজিবি আনার আরও দ্রুততর উপায় ^2.2
এবং ^(1/2.2)
এটি আরও সঠিক হবে। দুর্ভাগ্যক্রমে রৈখিকের পরিবর্তে অলৈখিক ইনপুট ব্যবহার করা অত্যন্ত সাধারণ।
ব্রাউজার ইত্যাদিতে ব্যবহৃত গ্রাস্কেলে রূপান্তরিত করার জন্য কেবলমাত্র এসআরজিবি চিত্রগুলি রূপান্তর করার জন্য নীচে কেবল সঠিক আলগোরিদম রয়েছে।
অভ্যন্তরীণ পণ্যটি গণনা করার আগে রঙের জায়গার জন্য গামা ফাংশনের একটি বিপরীত প্রয়োগ করা প্রয়োজন। তারপরে আপনি হ্রাসকৃত মানটিতে গামা ফাংশন প্রয়োগ করুন। গামা ফাংশন অন্তর্ভুক্ত করতে ব্যর্থ হওয়ার ফলে 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)
);
}
কেবলমাত্র সঠিক উত্তরগুলি হ'ল জিভ-ড্যাডসন এবং @ অ্যাডিংটোনসনকি উত্তরগুলি এবং সমর্থন হিসাবে @ নীল-পিপেনব্রিন্ক । অন্যান্য উত্তর (স্বীকৃত সহ) লিঙ্কগুলি বা উত্সগুলিকে উদ্ধৃত করে যা ভুল, অপ্রাসঙ্গিক, অপ্রচলিত বা ভাঙা।
যেহেতু এই থ্রেডটি অনুসন্ধান ইঞ্জিনগুলিতে সর্বাধিক উপস্থিত রয়েছে, তাই আমি এই বিষয়টি সম্পর্কিত বিভিন্ন ভ্রান্ত ধারণা পরিষ্কার করার জন্য যুক্ত করছি।
উজ্জ্বলতা একটি উপলব্ধিযোগ্য গুণ, এটির সরাসরি মাপকাঠি নেই।
অনুভূত লঘিমা যেমন 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 = (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
L*a*b*
বেশ কয়েকটি মনোবিজ্ঞানীয় গুণাবলী বিবেচনা করে না। হেলমহোল্টজ-কোহলরউশ ইফেক্ট এক, তবে আরও অনেকগুলি রয়েছে। সিআইএলবি কোনও উপায়ে কোনও "পূর্ণ" চিত্রের মূল্যায়ন মডেল নয়। আমার পোস্টে আমি খুব গভীর মিনটিয়ায় প্রবেশ না করে মূল ধারণাগুলি যথাসম্ভব সম্পূর্ণভাবে কভার করার চেষ্টা করছিলাম। হান্ট মডেল, ফেয়ারচাইল্ডের মডেল এবং অন্যান্যরা আরও সম্পূর্ণ কাজ করে তবে এগুলি যথেষ্ট জটিল।
আমি এই কোডটি পেয়েছি (সি # তে লিখিত) যা কোনও রঙের "উজ্জ্বলতা" গণনা করার একটি দুর্দান্ত কাজ করে। এই দৃশ্যে কোডটি রঙের উপরে সাদা বা কালো পাঠ্য রাখবেন কিনা তা নির্ধারণের চেষ্টা করছে।
মজার বিষয় হল, আরজিবি => এইচএসভির জন্য এই সূত্রটি কেবলমাত্র v = MAX3 (আর, জি, বি) ব্যবহার করে। অন্য কথায়, আপনি সর্বোচ্চ ব্যবহার করতে পারেন এইচএসভিতে (আর, জি, বি) ভি হিসাবে ।
আমি হ্যারেন এবং বেকারের 575 পৃষ্ঠায় পরীক্ষা করে দেখেছি তারা কীভাবে "মান" গণনা করে।
এখানে উল্লিখিত সূত্রগুলির এলোমেলো নির্বাচনের মধ্যে হারিয়ে যাওয়ার পরিবর্তে, আমি আপনাকে 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);
}
অন্যরা যা বলেছিল তা যুক্ত করতে:
এই সমস্ত সমীকরণ অনুশীলনে বেশ ভালভাবে কাজ করে, তবে আপনাকে যদি খুব সুনির্দিষ্ট হতে হয় তবে আপনাকে প্রথমে রঙকে রৈখিক রঙের স্থানগুলিতে রূপান্তর করতে হবে (বিপরীত চিত্র-গামা প্রয়োগ করুন), প্রাথমিক রঙগুলির ওজন গড় করতে হবে এবং - যদি আপনি চান রঙটি প্রদর্শন করুন - মনিটরের গামায় ফিরে আসুন umin
গাam়াকে উপেক্ষা করা এবং সঠিক গামা করার মধ্যে আলোকিত পার্থক্য অন্ধকার গ্রেতে 20% অবধি is
আমি আজ জাভাস্ক্রিপ্টে একই ধরণের কাজটি সমাধান করছিলাম। আমি 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))))
}
এইচএসভি রঙের স্থানটি কৌশলটি করা উচিত, উইকিপিডিয়া নিবন্ধটি দেখুন আপনি যে ভাষাতে কাজ করছেন তার উপর নির্ভর করে একটি গ্রন্থাগার রূপান্তর পেতে পারে।
এইচ হিউ যা রঙের জন্য একটি সংখ্যাসূচক মান (যেমন লাল, সবুজ ...)
এস হ'ল রঙের পরিপূর্ণতা, অর্থাৎ এটি কতটা 'তীব্র'
ভি হ'ল রঙের 'উজ্জ্বলতা'।
আরজিবি লুমিন্যান্স মান = 0.3 আর + 0.59 জি + 0.11 বি
http://www.scantips.com/lumin.html
আপনি যদি সাদাটির কাছাকাছি রঙের সন্ধান করছেন তবে আপনি ইউক্লিডিয়ান দূরত্বটি ব্যবহার করতে পারেন (255, 255, 255)
আমি মনে করি আরজিবি রঙের স্থানটি এল 2 ইউক্যালিডিয়ান দূরত্বের সাথে সম্মতিজনকভাবে অ-ইউনিফর্ম। ইউনিফর্ম স্পেস সিআইই ল্যাব এবং এলইউভি অন্তর্ভুক্ত।
জাভ ড্যাডসনের বিপরীত-গামা সূত্রটি জাভাস্ক্রিপ্টে প্রয়োগ করার সময় অর্ধ-সামঞ্জস্য করা সরিয়ে ফেলতে হবে, অর্থাৎ ফাংশন gam_sRGB থেকে রিটার্ন রিটার্ন করতে হবে (v * 255); ইনট রিটার্ন করবেন না (v * 255 + .5); অর্ধ-সামঞ্জস্য চূড়ান্ত হয়, এবং এটি একটি আর = জি = বি অর্থাৎ ধূসর রঙের ত্রিবারের চেয়ে খুব বেশি মানের কারণ হতে পারে। একটি আর = জি = বি ত্রিয়ার গ্রেস্কেল রূপান্তরটি আর এর সমান মান উত্পন্ন করতে হবে; এটি একটি প্রমাণ যে সূত্রটি বৈধ। কর্ম সূত্রে গ্রিস্কেলের নাইন শেডগুলি দেখুন (অর্ধ-সামঞ্জস্য না করে)।
আমি ভাবছি কীভাবে এই আরজিবি সহগগুলি নির্ধারিত হয়েছিল। আমি নিজেই একটি পরীক্ষা করেছি এবং আমি নিম্নলিখিতগুলি দিয়ে শেষ করেছি:
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 এর স্থায়ী গামা ফ্যাক্টর সহ একটি, তবে এটি আমার কাছে একই দেখাচ্ছে। আরও বেশি, আইটিইউ সহগগুলি আমার চোখের জন্য আক্ষরিক অর্থে ভুল।
এবং হ্যাঁ, আমি সম্ভবত একটি সাধারণ রঙিন দর্শন পেয়েছি।
এখানে সি কোডের একটি বিট যা সঠিকভাবে অনুভূত আলোকসজ্জা গণনা করা উচিত।
// 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
}
উজ্জ্বলতা সংজ্ঞায়িত করুন। আপনি যদি সাদাটির কাছাকাছি রঙের সন্ধান করছেন তবে আপনি ইউক্লিডিয়ান দূরত্বটি ব্যবহার করতে পারেন (255, 255, 255)
আর এর সাথে কোনও রঙের উজ্জ্বলতা নির্ধারণ করতে, আমি আরজিবি সিস্টেমের রঙকে এইচএসভি সিস্টেমের রঙে রূপান্তর করি।
আমার স্ক্রিপ্টে, আমি অন্যান্য কারণে আগে এইচএক্স সিস্টেম কোড ব্যবহার করি তবে আপনি আরজিবি সিস্টেম কোড দিয়েও শুরু করতে পারেন 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
স্পষ্টতার জন্য, যে সূত্রগুলি বর্গমূল ব্যবহার করে তা হওয়া দরকার
sqrt(coefficient * (colour_value^2))
না
sqrt((coefficient * colour_value))^2
এর প্রমাণ হ'ল গ্রেস্কেল আর-তে একটি আর = জি = বি ত্রিয়ার রূপান্তরিত। এটি কেবলমাত্র সত্য হবে যদি আপনি বর্ণের মান বর্গাকার করেন তবে বর্ণের মান বারের সহগ হয় না। গ্রেস্কেলের নয়টি শেড দেখুন