যার ঘড়ি সে তৈয়ার করে, ঘড়ির ভিতর লুকাইছে
**(এই লেখাটা 'মেশিনকে দেয়া একজোড়া ভাল চোখ - 1,2 ও 3' এর পরবর্তী অংশ;
আজকের আলোচনাটা আমার জন্য বেশ মজার, কিছুটা গল্পের মতো।
লিখতে গিয়ে মনে হলো, কিছু ফিগার আঁকতে পারলে খুবই ভাল হতো।
ও, আজকের এই লেখাটা Joseph Fourier কে উৎসর্গ করা)
////////////////////////////////////////////////
আগের লেখায় বলেছিলাম, আমার কাজের মূল ফোকাস হচ্ছে --- স্টেরেও ক্যামেরার বাম ও ডান ইমেজের বিভিন্ন পয়েন্টকে সনাক্ত করার জন্য ইমেজের Fourier analysis ব্যাবহার করা এবং সেখানে শুধু ইমেজের Phase অংশটাকে কনসিডার করা।
ইমেজ ম্যাচিং বা দুটো ইমেজের সাদৃশ্য নির্ণয়ে শুধু Phase ব্যাবহার করে কাজ করার উদাহরণ অনেক আগের;
এটা আমার আবিষ্কারও না (নাউযুবিল্লাহ ), প্রস্তাবও না।
অনেক আগেই 1975 এ কুগলিন ও হাইনস এই Phase Correlation এর কথা প্রস্তাব করেছেন।
আমার কথা হলো, স্টেরেও করেসপন্ডেন্স সার্চে এটা ভাল কাজ করবে; এবং তা রিয়াল সিস্টেম তৈরী করে দেখানোটাই আমার কাজ ছিল।
এখন আসুন Fourier analysis এর কথায়;
ম্যাথমেটিক্সে Fourier transform বলে একটা অপারেশান আছে, যেখানে যেকোন ফাংশান, সিগন্যাল বা ইমেজকে Frequency domain এ দেখা যায়।
একথা বললেও অবশ্য কিছুই বোঝার কথা নয়।
একটু অন্যভাবে বলি;
Joseph Fourier নামের এক ফরাসী গণিতবিদ আজ থেকে প্রায় দুই-শতাধিক বছর আগে বললেন যে, যেকোন ফাংশান/সিগনাল কে কতগুলো 'সাইন কার্ভ'এর সমষ্টি হিসেবে প্রকাশ করা যায়।
এই 'সাইন কার্ভ' গুলো
(1) ফিকোয়েন্সী , মানে কতদ্্রুত কার্ভটা ওঠানামা করছে,
(2) উচ্চতা , মানে সর্বোচ্চ কতটুকু উপরে উঠে কার্ভটা নামছে এবং
(3) দশা বা ফেজ, মানে কার্ভগুলোর পরস্পরের সাপেক্ষে অবস্থান --- এই তিনটি প্যারামিটারের ভিত্তিতে পরস্পরের থেকে আলাদা হয়।
Fourier Analysisএর মজার ব্যাপার হলো, একটা সিগনালকে যেমন Fourier transformation এর মাধ্যমে কতগুলো 'সাইন কার্ভ' এ ভেঙ্গে ফেলা যায়, তেমনি আবার ঐ 'সাইন কার্ভ' গুলো থেকে Inverse Fourier transformation এর মাধ্যমে অরিজিনাল সিগন্যালটাকে তৈরী করা যায়।
ইমেজও একধরনের দ্্বিমাত্রিক সিগন্যাল।
কাজেই, Joseph Fourier এর কথা অনুযায়ী ইমেজকেও অনেকগুলো দ্্বিমাত্রিক 'সাইন কার্ভে' র সমষ্টি হিসেবে ভাবা যায়। একটা সিগন্যালকে যখন ম্যানিপুলেট, মড্যুলেট,টর্্রান্সমিট, কমপ্রেস বা অন্যান্য
ে
অপারেশান করা হয়, তখন তাকে এরকম কতগুলো 'সাইন কার্ভ' এর সমষ্টি হিসেবে চিন্তা করলে কাজে অনেক সুবিধা।
আসলে এটা সম্ভব না হলে বর্তমান যে Electro-Communication সভ্যতা গড়ে উঠেছে, তা করা খুবই কঠিন হতো; সভ্যতার গতি এত দ্্রুত হতোনা।
বিংশ শতাব্দীর এই ধাঁই-ধাঁই করে এগিয়ে যাওয়ার পিছনে আমার মতে তাই সবচেয়ে বড় অবদান হলো Joseph Fourier এর, এবং তাঁর সাথে আরেকজন আছেন, তিনি হলেন James Clerk Maxwell।
Fourier Analysis এ কিভাবে সুবিধা তার একটা উদাহরণ দিই।
ধরুন, একটা ইমেজকে আমরা যদি সাধারণ অবস্থায় ট্রান্সমিশনের জন্য কল্পণা করি, তবে তার প্রতি পিক্সেলের তথ্য আমাদের জানতে হবে;
সেটা একটা বিশাল ব্যাপার!!
কিন্তু ধরুন, ইমেজটার Fourier Analysis করে দেখা গেল সে দশটা ভিন্ন ফ্রিকোয়েন্সীর 'সাইন কার্ভে'র সমষ্টি;
তাহলে ঐ দশটা সাইন কার্ভের (1) ফ্রিকোয়েন্সী, (2) উচ্চতা আর (3) ফেজ জানলে শুধু সেই তথ্যটা ট্রান্সমিট করে দিলেই হয়।
কারণ রিসিভার তখন Inverse Fourier transformation এর মাধ্যমে অরিজিনাল ইমেজটাকে তৈরী করতে পারবে।
এখানে তাহলে কি হলো?
ট্রান্সমিটার আর রিসিভার অংশে একবার করে Fourier transformation আর Inverse Fourier transformation করতে হবে, কিন্তু তার ফলে খুব সামান্য তথ্যই সরবরাহ করলেই চলবে।
ট্রান্সমিশনের খরচটা বেঁচে গেল খুব ভালভাবেই।
(এটা যাস্ট উদাহরণ; সাধারণত ইমেজ কমপ্রেশানে Fourier transform ব্যাবহার না করে Cosine transform ব্যাবহার করা হয়। )
ডিজিটাল ইমেজের বা সিগন্যালের ক্ষেত্রে যখন Fourier transform ব্যাবহার করা হয় তখন তাকে বলা হয় DFT (Discrete Fourier Transform)।
এই DFT কে বলা যায় বর্তমান ডিজিটাল যুগের প্রাণ।
এখন আসুন আমাদের Phase এর কথায়।
আগেই বলেছি, ইমেজ একটার Fourier Transform নিলে কতগুলো দ্্বিমাত্রিক 'সাইন কার্ভ' পাওয়া যাবে;
তাদের ফ্রিকোয়েন্সী আলাদা হবে; উচ্চতা আলাদা হবে; ফেজ আলাদা হবে।
কথার কথা (বাস্তবে এই উদাহরণ সমভব না!!, বোঝানোর সুবিধার জন্য এভাবে দিলাম), ধরুন বাম পাশের ছবিটাতে ধরুন ফ্রিকোয়েন্সী 1, 2, 3, 4 এর চারটি 'সাইন কার্ভ' পাওয়া গেল;
তাহলে যেহেতু ডানপাশের ছবিটাও একই রকম (যাস্ট লম্বালম্বি আর আড়াআড়ি কিছু ডিসপ্যারিটি আছে) কাজেই তাতেও ওরকম 1,2,3,4 ফ্রিকোয়েন্সীর চারটা 'সাইন কার্ভ ' পাওয়া যাবে;
এখন দুই ছবিতে প্রাপ্ত এই সাইন কার্ভগুলোর ভিন্নতা থাকবে কোথায়?
(1) উচ্চতায় ... আগের পর্বে বলেছিলাম উচ্চতা পিক্সেল ভ্যালুর তথ্য বহন করে;
দুই ছবিতে উজ্জলতা, ফোকাস, নয়েজ এসব সমস্যার কারণে একই বিন্দুর পিক্সেল ভ্যালু ভিন্ন হবে।
তাই 'সাইন কার্ভ' গুলোর উচ্চতাও ভিন্ন হবে।
(2) ফেজ বা অবস্থানে।
অর্থাৎ বাম ইমেজে ফ্রিকোয়েন্সী 1 এর কার্ভটা যেখান থেকে শুরু হবে, ডান ইমেজে তা শুরু হবে অন্যখান থেকে;
কারণ ডিসপ্যারিটি আছে।
ধরলাম এই শুরু হবার স্থানের ডিফারেন্সটা Theta।
এখন এই Phase এর ডিফারেন্সটা যেহেতু মেইনলি আকৃতির তথ্য বহন করে, তাই দুই ইমেজের সব 'সাইন কার্ভের' মধ্যে মোটামুটি একই ধরণের Phase difference থাকবে যা Theta এর কাছাকাছি।
এই Theta টাকে বের করতে পারলেই আমাদের দুই ইমেজের মধ্যকার দূরত্ব বের হবে।
তখন দুই ইমেজের একই পয়েন্টকেও সনাক্ত করা যাবে।
তবে সাবধান!!
বাম ও ডানের দুটো ছবিকে যদি পুরো কল্পনা করি, তাহলে প্রতিটি পয়েন্টের জন্য ডিসপ্যারিটি কিন্তু এক হবেনা।
কাজেই উপরে আমরা যে বাম বা ডান ইমেজ বললাম, তা হলো যে কোন পয়েন্টের জন্য বাম ও ডান ইমেজের থেকে কেটে নেয়া খুব ছোট অংশ, (সাধারণত 32 x 32 সাইজ)।
খুব ছোট করে কেটে নেয়া একইরকম এরকম ছোট অংশের ক্ষেত্রে অবশ্য বলাই যায় যে আশপাশের সব পয়েন্টের ডিসপ্যারিটি সমান।
আমাদের ব্যবহৃত এই শুধু Phase কনসিডার করে ইমেজ ম্যাচিংকে আমরা নাম দিয়েছি Phase-Only Correlation (POC) , এবং আউটপুটকে বলি POC ফাংশান।
32 x 32 সাইজের দুটা ইমেজের মধ্যে হিসেব করা POC ফাংশানের সাইজও হবে 32 x 32।
POC দুটো সদৃশ ইমেজের ক্ষেত্রে খুব শার্প একটা পীক দেখায়, অর্থাৎ ঐ 32 x 32 সাইজের ম্যাট্রিক্স POC এর 32 x 32 টি component এর মধ্যে শুধু একটি বা কয়েকটি component এর মান অন্যদের চেয়ে অনেক বড় হবে।
যখন, হিসেব করা POC ফাংশান এরকম শার্প পীক দেখাবে তখন বোঝা যাবে যে আমরা দুটো সদৃশ ইমেজ ব্লক নিয়ে তুলনা করেছি;
যখন দেখাবেনা তখন বোঝা যাবে যে ইমেজ ব্লকদুটো অসদৃশ।
অন্যান্য মেথডগুলো এত শার্প পীক দেখায়না, কারণ নয়েজ/ব্রাইটনেস এসবের প্রভাব থাকে।
তবে আরও মজার ব্যাপার হলো, POC এর পীকটার coordinate হলো ব্যাবহার করা ডান আর বাম ইমেজের 'ডিসপ্যারিটি' itself!!!
কাজেই একবার POC হিসেব করলেই পিকের অবস্থান থেকে বাম আর ডান ইমেজ ব্লকের 'ডিসপ্যারিটি' হিসেব করা যায়।
এভাবে, বাম ইমেজের প্রত্যেক পয়েন্টের জন্য তাকে কেন্দর করে 32 x 32 সাইজের ইমেজ ব্লক কেটে, ডান ইমেজে সদৃশ ব্লক খুঁজে বের করা হয়।
সদৃশ ব্লক খুঁজে পেলে, দুই ব্লকের 'ডিসপ্যারিটি' থেকে ঐ পয়েন্টের ডিসপ্যারিটি পাওয়া যায়।
এখন আসল কথায় আসি।
ডিজিটাল ইমেজ হলো Discrete; উপরের বর্ণিত হিসেবগুলোও সব Discrete লেভেলের।
কিন্তু চিন্তা করুন,
বাম ইমেজের ধরুন (100,100) নাম্বার পিক্সেলে একজনের মুখের যে অংশটুকু পড়েছে, ডান ইমেজেও যে তা মেপে মেপে একটা পিক্সেলের ভেতরেই পড়বে তার নিশ্চয়তা কি?
(এই নিশ্চয়তাটা টোপ ফেললে কেঁচোর মাছ খাওয়ার নিশ্চয়তার চেয়েও কম!! ... ... )
এমনটা হতে পারে যে মুখের সেই অংশটা ডান ইমেজে (115,105) আর (116,104) নম্বর পিক্সেলে অর্ধেক অর্ধেক পড়েছে;
হয়ত সেটার আসল অবস্থান (115.65,104.35)!!
এখন এই Non-integer করেসপন্ডেন্স কিভাবে বার করব?
উপায় আছে
সাব-পিক্সেল করেসপন্ডেন্স সার্চ;
সাধারণত ফাংশান ফিটিং দিয়ে করা হয়।
সেকথা আবার পরে হবে ক্ষণ।
।
অনলাইনে ছড়িয়ে ছিটিয়ে থাকা কথা গুলোকেই সহজে জানবার সুবিধার জন্য একত্রিত করে আমাদের কথা । এখানে সংগৃহিত কথা গুলোর সত্ব (copyright) সম্পূর্ণভাবে সোর্স সাইটের লেখকের এবং আমাদের কথাতে প্রতিটা কথাতেই সোর্স সাইটের রেফারেন্স লিংক উধৃত আছে ।