একটি লিনিয়ার বনাম একটি অ-লিনিয়ার আরজিবি স্পেসে রঙের সাথে কাজ করার সময় ব্যবহারিক পার্থক্যগুলি কী কী?


90

লিনিয়ার আরজিবি স্পেসের মূল সম্পত্তি কী এবং কোনও অ-রৈখিকের মৌলিক সম্পত্তি কী? সেই 8 (বা আরও বেশি) বিটগুলিতে প্রতিটি চ্যানেলের অভ্যন্তরের মানগুলি নিয়ে কথা বলার সময় কী পরিবর্তন হয়?

ওপেনগিএলে, রঙগুলি 3 + 1 মান এবং এর সাথে আমার অর্থ আরজিবি + আলফা, প্রতিটি চ্যানেলে 8 বিট সংরক্ষিত থাকে এবং এটি সেই অংশ যা আমি স্পষ্টভাবে পাই।

তবে যখন গামা সংশোধনের কথা আসে আমি কোনও অ-রৈখিক আরজিবি স্পেসে কাজ করার প্রভাব কী তা পাই না।

যেহেতু আমি ফটো এডিটিংয়ের জন্য গ্রাফিক সফ্টওয়্যারটিতে একটি বক্ররেখা ব্যবহার করতে জানি, আমার ব্যাখ্যাটি হ'ল একটি লিনিয়ার আরজিবি স্পেসে আপনি যে মানগুলি ঠিক তেমন গ্রহণ করেন, কোনও ম্যানিপুলেশন এবং কোনও গণিতের ক্রিয়াকলাপ সংযুক্ত না হয়ে পরিবর্তে যখন এটি প্রতিটি অ-রৈখিক হয় চ্যানেল সাধারণত একটি ক্লাসিক শক্তি ফাংশন আচরণ অনুসরণ করে বিকশিত হয়।

এমনকি যদি আমি এই ব্যাখ্যাটিকে বাস্তব হিসাবে গ্রহণ করি, তবুও সত্যিকারের রৈখিক স্থানটি কী তা আমি এখনও পাই না কারণ গণনার পরে সমস্ত অ-রৈখিক আরজিবি স্পেসগুলি লিনিয়ার হয়ে যায় এবং সবচেয়ে গুরুত্বপূর্ণ আমি সেই অংশটি পাই না যেখানে একটি অ লিনিয়ার কালার স্পেসটি মানুষের চোখের জন্য আরও উপযুক্ত কারণ শেষ পর্যন্ত সমস্ত আরজিবি স্পেস আমি যা বুঝি তার জন্য লিনিয়ার are


একটি ব্যবহারিক নোটে, আপনি এসভিজিতে আপনার রঙের স্থান হিসাবে লিনিয়ার বা স্ট্যান্ডার্ড আরজিবি নির্দিষ্ট করতে পারেন এবং এর প্রভাব কী তা আমার কোনও ধারণা নেই, এটি গুরুত্বপূর্ণ বলে মনে হচ্ছে :-)
মাইকেল মুল্লানি

@ মিশেলমুল্লানি এই লিনিয়ার জিনিসটি বাস্তব স্বতন্ত্র মানের চেয়ে ব্যবহারকারীর জন্য একটি ইঙ্গিতের মতো দেখায়।
কেন

এমন কিছু যা আমাকে সাহায্য করেছিল: আমি মনে করি এটি একটি গণিতের শিক্ষক যা আমাকে "যখন আপনি লিনিয়ার শুনবেন তখন ভাবুন" বলেছিলেন told এটি কোনওরকম সাহায্য করে কিনা তা নিশ্চিত নয় তবে আমার জন্য এটি "ওহ হ্যাঁ!" মুহূর্ত
জো প্লান্ট

উত্তর:


234

ধরা যাক আপনি আরজিবি রঙের সাথে কাজ করছেন: প্রতিটি রঙ তিনটি তীব্রতা বা উজ্জ্বলতার সাথে উপস্থাপিত হয় । আপনি "লিনিয়ার আরজিবি" এবং "এসআরজিবি" এর মধ্যে চয়ন করতে পারেন। আপাতত, আমরা তিনটি পৃথক তীব্রতা উপেক্ষা করে জিনিসগুলিকে সহজ করব, এবং ধরে নিই যে আপনার কেবল একটি তীব্রতা রয়েছে: এটি হ'ল আপনি কেবল ধূসর ছায়ার সাথে কাজ করছেন।

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


6
আশ্চর্যজনক উত্তর, আপনাকে ধন্যবাদ, জিনিসগুলি ব্যাখ্যা করার জন্য এটি সর্বদা আশ্চর্যজনক, আমি কেবল একটি বই বা এমন একটি সংস্থান চাইব যে আপনার মতে এই বিষয়টির জন্য যথেষ্ট ভাল হবে, বর্ণের স্থানগুলি, এবং রূপান্তর এসআরজিবি করতে ব্যবহৃত সূত্রগুলি কী কী? <-> রৈখিক বা কী কাজ যা এই আচরণটি আনুমানিক করতে পারে।
কেন

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



1

আমি কোনও "মানব বর্ণ সনাক্তকরণ বিশেষজ্ঞ" নই, তবে আমি YUV-> আরজিবি রূপান্তরটিতে একই জিনিস পেয়েছি। আর / জি / বি চ্যানেলের জন্য বিভিন্ন ওজন রয়েছে, সুতরাং যদি আপনি উত্সের রঙটি এক্স দ্বারা পরিবর্তন করেন তবে আরজিবি মানগুলি বিভিন্ন পরিমাণ পরিবর্তন করে।

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

এখানে গুপ্ত সংখ্যার সাথে জাদুযুক্ত YUV-> আরজিবি সূত্র অন্তর্ভুক্ত করা হয়েছে: http://www.fourcc.org/fccyvrgb.php


4
আরজিবি <-> YUV রূপান্তর এবং পিছনে সম্পর্কে সতর্ক থাকুন। আমি এটি নিশ্চিত না যে এটি প্রতিটি ক্ষেত্রেই রয়েছে কিনা তবে YUV রঙের স্থানটি কখনও কখনও 24-বিট আরজিবিতে 0-255 এর পরিবর্তে 16-235 এর পরিসরে রূপান্তর করে। সুতরাং, আপনি প্রতিটি সময় রঙের স্থান রূপান্তর করার সময় ডেটা হারাতে পারেন। আপনি যদি এটি সহায়তা করতে পারেন তবে বেশিরভাগ লোক একই রঙের জায়গার মধ্যে রাখার কথা বলে।
জো প্লান্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.