আমাদের কথা খুঁজে নিন

   

মেশিনকে দেয়া একজোড়া ভাল চোখ - 3: ডিজিটাল ইমেজের নানাকথা

যার ঘড়ি সে তৈয়ার করে, ঘড়ির ভিতর লুকাইছে

**(এই লেখাটা 'মেশিনকে দেয়া একজোড়া ভাল চোখ - 1 ও 2' এর পরবর্তী অংশ; আলোচনাটা আগের চেয়েও জটিল এখানে!! আপনাদের কি বুঝাব? ... আমার নিজেরই বুঝতে গোলমাল লেগে যায় প্রায়ই ) //////////////////////////////////////////////// আগের পর্বে বলেছিলাম টাস্ক -2 অর্থাৎ বাম ও ডান ক্যামেরায় তোলা ছবিদুটোতে একই রকম বিন্দুকে খুঁজে বের করাটা হলো একটা বিরাট ঝামেলার কাজ। একাজের তাত্তি্বক আলোচনা করতে গেলে প্রচুর সমীকরণ, ফিগার আর ব্ল্যাকবোর্ড/চকের আঁকিবুঁকি লাগবে। তাই এড়িয়ে গেলাম। এখানে একটু গল্পের মতো করে আলোচনা করি। প্রথমে আসুন ডিজিটাল ইমেজ নিয়ে আলোচনা করি; পাশেই জি্বনের বাদশার যে ছবিটা ঝুলছে, এটা একটা ডিজিটাল ইমেজ/ছবি; এই ছবিটাকে ধরুন লম্বালম্বিভাবে 100 ভাগ করা হলো; তারপর আড়াআড়িভাবে 150 ভাগ করা হলো; তাহলে ছবিটাকে মোট 100 x 150 টি ছোটছোট বর্গাকার ঘরে ভাগ করা যাবে; এগুলো তখন সাইজে এতই ছোট যে দেখবেন প্রতিটি বর্গাকার ঘরের রংটা একই রকম; এই ছোট ছোট ঘরগুলোকেই 'পিক্সেল' বলা হয়; প্রতিটি পিক্সেলের রংকে বলা হয় পিক্সেল ভ্যালু; সাদাকালো (আসলে গ্রে-স্কেল ছবি) ছবিতে প্রত্যেক পিক্সেলের জন্য একটি পিক্সেল ভ্যালুথাকে; এই ভ্যালুর রেঞ্জ হতে পারে 0 থেকে 127, অথবা 0 থেকে 255, অথবা 0 থেকে 523 অথবা অন্যকিছু।

রঙীন ছবিতে প্রত্যেক পিক্সেলের জন্য তিনটি পিক্সেল ভ্যালুথাকে (সবচেয়ে পরিচিত ফরম্যাট হলো লাল, সবুজ, নীল আলো RGB); এখানে সাদাকালো ছবি নিয়ে আলোচনা করব বলে রঙীন ছবি নিয়ে ডিটেইলস আলোচনা করছিনা। এখন, যেকোন ডিজিটাল ছবিকেই এরকম অসংখ্য বর্গাকার পিক্সেলের আয়তাকার সমষ্টি বলা যায়; কম্পিউটার যখন একটা ডিজিটাল ছবিকে 'রিড' করে, তখন সে আসলে সেই ছবিটাকে একগাদা সংখ্যার (পিক্সেল ভ্যালুগুলোর)একটা আয়তাকার সমষ্টি হিসেবে রিড করে; যেমন , 5 x 5 সাইজের একটা ছবিকে কম্পিউটার রিড করে এভাবে (সংখ্যার মানগুলো যাস্ট উদাহরণ ), 115 । 120 । 112 । 113 ।

100 103 । 100 । 098 । 094 । 105 100 ।

111 । 099 । 097 । 102 100 । 105 ।

109 । 103 । 108 090 । 100 । 102 ।

096 । 096 এভাবে সংখ্যার প্রকাশকে বলা 'ম্যাট্রিক্স'। কম্পিউটারের কাছে একটা ছবি একটা ম্যাট্রিক্সের চেয়ে বেশী কিছু নয়; সেজন্যই বেচারার দুটো ছবিতে একই জিনিস সনাক্ত করতে এত কষ্ট হয়!! (আহারে!! ব্যাটা যদি ছবির সৌন্দর্য বুঝত!!) এখন কম্পিউটারকে যখন দুটো ছবি ধরিয়ে দিয়ে বলা হয়, এদের মধ্যকার একই রকম বিন্দুগুলোকে বের কর, তখন তার কিছু গানিতিক হিসেব করা ছাড়া আর কোন উপায় থাকেনা। যেকোন ছবিতে কিছু 'স্পেশাল বিন্দু' থাকে, যেমন মানুষের ফেসের ক্ষেত্রে নাকের অগ্রবিন্দু, চোখের কোণা এসব; এধরণের 'বিশেষ' পয়েন্ট বা বিন্দুগুলোকে বলা হয় 'ফিচার পয়েন্ট'; Edge detection, segment analysis, gradient analysis ইত্যাদির মাধ্যমে এসব ফিচার পয়েন্টকে সহজেই বের করা যায়। কিন্তু, এখন যেসব এ্যাপ্লিকেশনের কথা চিন্তা করা হয়, যেমন ভার্চুয়্যাল রিয়ালিটি, ফেস রিকগনিশন, মুভি জেনেরেশান, মেডিক্যাল অপারেশান --- এসব ক্ষেত্রে dense 3D information লাগে, অর্থাৎ অল্প কিছু ফিচার পয়েন্ট দিয়ে কাজ চালানো যায়না।

তাই, উদাহরনস্বরূপ, মুখের ত্রিমাত্রিক মডেল (একই সাথে সঠিক ত্রিমাত্রিক তথ্য) তৈরীর ক্ষেত্রে মুখের প্রতিটি অংশেরই (মুখ, কপাল,গাল, চিবুক, নাক, চোখ) প্রচুর সংখ্যক বিন্দুকে দুটি ছবিতে খুঁজে বের করতে হয়। (এখানে আবার রিপীট করছি, যে বিন্দুটিকেই খুঁজে বের করা যাবে তারই 3D information জানা যাবে। ) যখন এরকম প্রচুর সংখ্যক বিন্দুকে খুঁজে বের করতে হয়, তখন 'এরিয়া-বেসড সার্চ' করা হয়; এটা হলো --- বাম ক্যামেরার ছবির যেকোন একটা বিন্দুর জন্য তার চারপাশের একটা অংশকে (সাধারণত ইমেজ থেকে ছোট একটা ব্লক (ব্লগ না ... ...) এক্সট্রাক্ট করা হয়) কনসিডার করা হয়; তারপর ডান ছবিতে একই রকম ব্লক খুঁজে বের করা হয়। এই 'এরিয়া-বেসড সার্চের' জন্য সাধারণত SAD (Sum of Absolute Difference), SSD (Sum of Squared Difference), NCC (Normalized Cross Correlation)-- এসব মেথড ব্যাবহার হয়। উল্লেখ্য, শুধু স্টেরেও ভিশন না, ভিডিও প্রসেসিং-এও এরকম সার্চের প্রয়োজন হয়, এবং ভিডিওতে পরপর দুটো ইমেজ-ফ্রেমে একই বিন্দু কোথায় অবস্থিত তা বের করার জন্য উপরোল্লিখিত পদ্ধতিগুলো বেশ ভাল।

কারণ, ভিডিওর ক্ষেত্রে 'সার্চে' ব্যাবহৃত পরপর দুটো ছবির ক্ষেত্রে তাদের দূরত্ব থাকে কম, একই ক্যামেরায় ছবি তোলা হয় বলে ব্রাইটনেস সমস্যা থাকেনা এবং ছবিদুটোতে নয়েজ লেভেল এক থাকে। কিন্তু যখন, দুটো স্টেরেও ক্যামেরা ব্যাবহার করা হয় তখন তাদের ব্রাইটনেস ভিন্ন হয়, ফোকাসও পুরোপুরি এক হয়না (ফলে এক ছবিতে পরিষ্কার বিন্দু অন্য ছবিতে ঘোলা আসতে পারে), নয়েজ লেভেলও ভিন্ন হয়। ফলে, একই লালবিন্দু ডান ও বাম ছবিতে ভিন্ন উজ্জলতা অর্থাৎ ভিন্ন পিক্সেল ভ্যালু নিয়ে ইমেজড হয়!! আবার, ছবিদুটোর মধ্যে 'ডিসপ্যারিটি' ভিডিওর তুলনায় বেশী থাকে বলে একই ধরণের দুটো ইমেজ ব্লককে খুঁজে বের করাও কঠিন!!! তখন আমাদের সিদ্ধান্ত নিতে হয় যে, 'পিক্সেল ভ্যালু' কে কনসিডার করলে স্টেরেও ভিশনের ক্ষেত্রে মিসম্যাচ এবং এরর বেশী হবে; উপরে উল্লেখিত SAD (Sum of Absolute Difference), SSD (Sum of Squared Difference), NCC (Normalized Cross Correlation) মেথডগুলো সরাসরি পিক্সেল ভ্যালু নিয়ে কাজ করে; তাই এরা ভাল রেজালট দেয়না। সরাসরি 'পিক্সেল ভ্যালু' নিয়ে কাজ না করতে চাইলে তখন আর ভাল যে একটা উপায় থাকে, তা হলো Fourier Analysis। Fourier Analysis এ একটা ইমেজের দুইটা অংশ থাকে -- Amplitude and Phase।

Amplitude অংশটা পিক্সেল ভ্যালুর তথ্য বহন করে, আর Phase অংশটা বস্তুর আকৃতির তথ্য বহন করে। আমাদের দরকার বস্তুর 'ডিসপ্যারিটি' বা দুরত্ব; শুধু আকৃতির তথ্য থেকেই তা বের করা যায়; তারপর, পিক্সেল ভ্যালুকে পাত্তা দেয়া না হলে নয়েজ, ব্রাইটনেস এসব সমস্যা থেকেও রেহাই পাওয়া যায়; কাজেই স্টেরেও ভিশনের ক্ষেত্রে Phase ব্যবহার করে সার্চ করাটাই ভাল -- এই হচ্ছে আমার কথা। এখন, বাবা, বলেছ ভাল কথা; করে দেখাও!! সেটা করে দেখাতে গিয়েই প্রথমে 'সার্চ এ্যালগরিদম' তৈরী; তারপর 3D Measurement সিস্টেম তৈরী; তারপর তুলনা করে দেখা কতটুকু ভাল কাজ করে! তারপর কিছু এ্যাপ্লিকেশানে ব্যাবহার। সে গল্প না হয় পরের পর্বে হবে।


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