ধরা যাক আপনি আরজিবি রঙের সাথে কাজ করছেন: প্রতিটি রঙ তিনটি তীব্রতা বা উজ্জ্বলতার সাথে উপস্থাপিত হয় । আপনি "লিনিয়ার আরজিবি" এবং "এসআরজিবি" এর মধ্যে চয়ন করতে পারেন। আপাতত, আমরা তিনটি পৃথক তীব্রতা উপেক্ষা করে জিনিসগুলিকে সহজ করব, এবং ধরে নিই যে আপনার কেবল একটি তীব্রতা রয়েছে: এটি হ'ল আপনি কেবল ধূসর ছায়ার সাথে কাজ করছেন।
রৈখিক রঙ-স্পেসে, আপনি যে নম্বরগুলি সংরক্ষণ করেন এবং যে প্রতিনিধিত্ব করে তাদের তীব্রতার মধ্যে সম্পর্ক লৈখিক। ব্যবহারিকভাবে, এর অর্থ হ'ল আপনি যদি সংখ্যাটি দ্বিগুণ করেন তবে আপনি তীব্রতা (ধূসরের হালকা) দ্বিগুণ করবেন। যদি আপনি একসাথে দুটি তীব্রতা যুক্ত করতে চান (কারণ আপনি দুটি আলোক উত্সের অবদানের উপর ভিত্তি করে একটি তীব্রতা গণনা করছেন বা আপনি কোনও অস্বচ্ছ বস্তুর উপরে একটি স্বচ্ছ বস্তু যুক্ত করছেন) তবে আপনি কেবল এটি যোগ করে এটি করতে পারেন একসাথে দুটি সংখ্যা। আপনি যদি কোনও ধরণের 2 ডি মিশ্রণ বা 3 ডি শেডিং বা প্রায় কোনও চিত্র প্রক্রিয়াকরণ করে থাকেন তবে আপনি আপনার রৈখিক রঙ-স্পেসে তীব্রতা চান, যাতে আপনি তীব্রতার উপর একই প্রভাব রাখতে কেবল সংখ্যা যোগ করতে, বিয়োগ করতে, গুণ করতে এবং ভাগ করতে পারেন। বেশিরভাগ রঙ-প্রক্রিয়াকরণ এবং রেন্ডারিং অ্যালগরিদমগুলি কেবলমাত্র লিনিয়ার আরজিবি দিয়ে সঠিক ফলাফল দেয়, যদি না আপনি সবকিছুতে অতিরিক্ত ওজন যুক্ত করেন।
এটি সত্যিই সহজ শোনায় তবে একটি সমস্যা আছে। আলোর প্রতি মানুষের চোখের সংবেদনশীলতা উচ্চ তীব্রতার চেয়ে কম তীব্রতায় সূক্ষ্ম। এটি বলার অপেক্ষা রাখে না, আপনি যে সমস্ত তীব্রতার সাথে পার্থক্য করতে পারেন তার একটি তালিকা তৈরি করলে হালকা রঙের চেয়ে আরও গা dark় রঙ রয়েছে। এটিকে অন্য উপায়ে বলতে চাইলে ধূসর রঙের হালকা শেডের চেয়ে ধূসর রঙের গা dark় শেডগুলি আরও ভাল করে বলতে পারেন। বিশেষত, যদি আপনি আপনার তীব্রতা উপস্থাপন করতে 8 টি বিট ব্যবহার করেন এবং আপনি এটি রৈখিক রঙ-স্পেসে করেন তবে আপনার প্রচুর হালকা ছায়াছবি হবে, এবং পর্যাপ্ত গা dark় শেড নয়। আপনি আপনার অন্ধকার অঞ্চলে ব্যান্ডিং পান, আপনার হালকা অঞ্চলে আপনি কাছাকাছি-সাদা রঙের বিভিন্ন ছায়ায় বিট নষ্ট করছেন যা ব্যবহারকারী পৃথক করে বলতে পারবেন না।
এই সমস্যাটি এড়াতে এবং সেই 8 টি বিটের সর্বোত্তম ব্যবহার করতে আমরা এসআরজিবি ব্যবহার করার ঝোঁক করি । আপনার রঙগুলি অ-রৈখিক করতে, এসআরজিবি স্ট্যান্ডার্ড আপনাকে ব্যবহার করতে একটি বক্ররেখা বলে tells বক্ররেখার নীচে অগভীর, যাতে আপনি আরও গা dark় ধূসর এবং শীর্ষে স্টিপার রাখতে পারেন, তাই আপনার কম হালকা ধূসর রয়েছে। আপনি যদি সংখ্যাটি দ্বিগুণ করেন তবে আপনি দ্বিগুণের চেয়ে তীব্রতা দিন। এর অর্থ হ'ল আপনি যদি এসআরজিবি রঙগুলি একসাথে যোগ করেন তবে আপনি এমন ফলাফল দিয়ে শেষ করুন যা এর চেয়ে হালকা ighter আজকাল, বেশিরভাগ মনিটররা তাদের ইনপুট রঙগুলিকে এসআরজিবি হিসাবে ব্যাখ্যা করে। সুতরাং, আপনি যখন স্ক্রিনে কোনও রঙ রাখছেন, বা প্রতি-চ্যানেলটিতে 8-বিট-বিট-এ সংরক্ষণ করছেন , তখন এটি এসআরজিবি হিসাবে সংরক্ষণ করুন , যাতে আপনি সেই 8 টি বিটের সর্বোত্তম ব্যবহার করতে পারেন।
আপনি লক্ষ্য করবেন আমাদের এখন একটি সমস্যা রয়েছে: আমরা চাই আমাদের রঙগুলি লিনিয়ার স্পেসে প্রক্রিয়াজাত করা হোক তবে এসআরজিবিতে সঞ্চিত থাকে। এর অর্থ আপনি পড়াতে এসআরজিবি-থেকে-লিনিয়ার রূপান্তরকরণ এবং রচনায় রৈখিক-থেকে-এসআরজিবি রূপান্তর করছেন। যেমনটি আমরা ইতিমধ্যে বলেছি যে লিনিয়ার 8-বিটের তীব্রতায় পর্যাপ্ত পরিমাণে ডার্ক নেই, এর ফলে সমস্যা দেখা দিতে পারে, তাই আরও একটি ব্যবহারিক নিয়ম রয়েছে: আপনি যদি এড়াতে পারেন তবে 8-বিট লিনিয়ার রঙ ব্যবহার করবেন না । নিয়মটি অনুসরণ করার জন্য এটি প্রচলিত হয়ে উঠছে যে 8-বিট রঙ সর্বদা এসআরজিবি থাকে, সুতরাং আপনি নিজের তীব্রতা 8 থেকে 16 বিট বা পূর্ণসংখ্যার থেকে ভাসমান-বিন্দুতে প্রশস্ত করার সাথে সাথে আপনার এসআরবিবি-থেকে-রৈখিক রূপান্তর করেন; একইভাবে, আপনি যখন আপনার ফ্লোটিং-পয়েন্ট প্রসেসিং শেষ করবেন, আপনি এসআরজিবিতে রূপান্তরকরণের সাথে সাথে একই সময়ে 8 টি বিটকে সঙ্কুচিত করুন। আপনি যদি এই নিয়মগুলি অনুসরণ করেন,
আপনি যখন কোনও এসআরজিবি চিত্র পড়ছেন এবং আপনি লিনিয়ার তীব্রতা চান, প্রতিটি তীব্রতার জন্য এই সূত্রটি প্রয়োগ করুন:
float s = read_channel();
float linear;
if (s <= 0.04045) linear = s / 12.92;
else linear = pow((s + 0.055) / 1.055, 2.4);
অন্যদিকে যাচ্ছেন, আপনি যখন এসআরজিবি হিসাবে কোনও চিত্র লিখতে চান, প্রতিটি সূত্রের তীব্রতায় এই সূত্রটি প্রয়োগ করুন:
float linear = do_processing();
float s;
if (linear <= 0.0031308) s = linear * 12.92;
else s = 1.055 * pow(linear, 1.0/2.4) - 0.055; ( Edited: The previous version is -0.55 )
উভয় ক্ষেত্রেই ভাসমান-পয়েন্টের মান 0 থেকে 1 এর মধ্যে থাকে, সুতরাং আপনি যদি 8-বিট পূর্ণসংখ্যা পড়েন তবে প্রথমে 255 দিয়ে বিভাজক করতে চান এবং আপনি যদি 8-বিট পূর্ণসংখ্যা লিখছেন তবে 255 দিয়ে গুণন করতে চান সর্বশেষে, আপনি সাধারণত একইভাবে। এসআরজিবি নিয়ে কাজ করার জন্য আপনাকে কেবল এটি জানা দরকার।
এখন অবধি, আমি কেবলমাত্র একটি তীব্রতার সাথে মোকাবিলা করেছি, তবে রঙগুলির সাথে চালানোর জিনিস রয়েছে। মানব চক্ষু বিভিন্ন উজ্জ্বলতার চেয়ে আলাদা আলাদা উজ্জ্বলতা বলতে পারে (আরও প্রযুক্তিগতভাবে এটির কালামিন্যাসের চেয়ে ভাল লুমিন্যান্স রেজোলিউশন রয়েছে), তাই আপনি রঙিনটি থেকে আলাদাভাবে উজ্জ্বলতা সঞ্চয় করে আপনার 24 বিটের আরও ভাল ব্যবহার করতে পারেন। ওয়াইইউভি, ওয়াইসিআরসিবি ইত্যাদি উপস্থাপনাগুলি এটি করার চেষ্টা করে। ওয়াই চ্যানেলটি রঙের সামগ্রিক স্বল্পতা এবং অন্য দুটি চ্যানেলের চেয়ে বেশি বিট (বা আরও স্থানিক রেজোলিউশন রয়েছে) ব্যবহার করে। আরজিবি তীব্রতার সাথে আপনি যেমন করেন তেমন কোনও বাঁক প্রয়োগ করার দরকার নেই (সর্বদা)। YUV একটি রৈখিক রঙ-স্থান, তাই আপনি যদি চ্যানেলের সংখ্যাটি দ্বিগুণ করেন তবে রঙের স্বচ্ছতা দ্বিগুণ করেন তবে আরজিবি রঙের সাথে আপনি যেমন YUV রঙগুলি একসাথে যোগ বা গুণ করতে পারবেন না, তাই এটি '
আমি মনে করি এটি আপনার প্রশ্নের উত্তর দেয়, তাই আমি একটি দ্রুত historicalতিহাসিক নোট দিয়ে শেষ করব। এসআরজিবি এর আগে, পুরানো সিআরটিগুলিতে একটি অ-লাইনারিটি নির্মিত হত। আপনি যদি এক পিক্সেলের জন্য ভোল্টেজ দ্বিগুণ করেন তবে আপনি তীব্রতার দ্বিগুণ হবে। প্রতিটি মনিটরের জন্য আরও কত আলাদা ছিল এবং এই পরামিতিটিকে গামা বলা হয়েছিল । এই আচরণটি কার্যকর ছিল কারণ এর অর্থ আপনি লাইটের চেয়ে বেশি ডার্ক পেতে পারেন তবে এর অর্থ হ'ল আপনি এটি আগে বলতে না পারলে ব্যবহারকারীর সিআরটিতে আপনার রঙগুলি কতটা উজ্জ্বল হবে তা বলতে পারবেন না। গামা সংশোধনমানে আপনি যে রঙগুলি দিয়ে শুরু করেছেন তা রূপান্তর করা (সম্ভবত লিনিয়ার) এবং ব্যবহারকারীর সিআরটি-র গ্যামার জন্য তাদের রূপান্তর। ওপেনজিএলটি এই যুগ থেকে এসেছে, যার কারণে এর এসআরজিবি আচরণটি মাঝে মাঝে কিছুটা বিভ্রান্ত হয়। তবে জিপিইউ বিক্রেতারা এখন আমি উপরে বর্ণিত কনভেনশনটি নিয়ে কাজ করার প্রবণতা দেখিয়েছি: আপনি যখন কোনও টেক্সচার বা ফ্রেমবফারটিতে একটি 8-বিট তীব্রতা সঞ্চয় করেন, তখন এটি এসআরজিবি হয় এবং আপনি যখন রঙ প্রসেসিং করেন তখন এটি লিনিয়ার। উদাহরণস্বরূপ, একটি ওপেনগিএল ইএস 3.0, প্রতিটি ফ্রেমবফার এবং টেক্সচারের একটি "এসআরবিবি পতাকা" রয়েছে যা আপনি পড়া এবং লেখার সময় স্বয়ংক্রিয় রূপান্তর সক্ষম করতে চালু করতে পারেন। আপনার স্পষ্টতই এসআরজিবি রূপান্তর বা গামা সংশোধন করার দরকার নেই।