স্ক্যান করার সময় পাতা একটু এদিক ওদিক কাত হয়ে যেতেই পারে।
মনে করি আমাদের স্ক্যান করা পাতাটি এমন।
এখন, এই অবস্থায় স্ক্যান করা পাতা থেকে টেক্স্ট রিকগনিশন করা মুশকিল হয়ে যাবে। ওদিকে কম্পিউটারের কাছে একটা ছবি কিছু কালো আর সাদা ফোটার সমষ্টি ছাড়া কিছুই নয়। সে কীভাবে বুঝবে কোন দিকে কতটুকু ঘোরালে লেখাগুলো সোজা হবে?
এটা করতে আমরা ব্যবহার করবো ডিস্ক্রিট ফুরিয়ার ট্রান্সফর্ম। তখন যে ফলাফল পাওয়া যাবে সেটা দেখতে এমন।
দেখুন মাঝ খানে একটা সাদা দাগ দেখা যাচ্ছে। ওর মানে হলো ঐ বরাবর হাটলে বারবার সাদা থেকে কালোতে বদলায় পিক্সেলগুলো। এই দাগটা কতডিগ্রি কোনে আছে বের করতে পারলেই ততটুকু উলটো ঘুরিয়ে নিলে কাজ হয়ে যাবে। কিন্তু এই ছবিতে নানান রকম হিজিবিজি ঝিরিঝিরি। এতকিছুর মধ্যে কোন সাদা বিন্দুগুলো কাজের সেটা কম্পিউটারের পক্ষে বোঝা মুশকিল। বাড়তি বিন্দু গুলো দূর করতে তাই, আমরা একটা এজ ডিটেকশন অ্যালগরিদম চালাবো। এই অ্যালগরিদম ছবির যেসব অংশ বেশি বেশি সাদা সেগুলোকে দাগ দিয়ে ঘিরে ফেলে, আর বাকি অংশ মুছে কালো করে দেয়। ফলাফল দাঁড়ায় এমন। অনেকটা ফটোশপের ম্যাজিক সিলেক্টর টুলের মত। এখানে বলে রাখি, ফুরিয়ার ট্রান্সফর্ম করার সুবিধা হলো, ছবিতে যদি কাটা ছেড়া, পোকামাকড়, কাগজে চায়ের কাপের দাগ, ইত্যাদি থাকে তার পরেও, ঠিকই আমাদের উদ্দিষ্ট সাদা দাগটা আমরা পেয়ে যাবো!
এখন অন্যসব হিজিবিজির মধ্যে মাঝের দাগটা বেশ ফুটে উঠেছে! কিন্তু ছবিটাকে স্রেফ একটা কালো গ্রাফ কাগজে সাদা সাদা অনেকগুলো বিন্দু ভাবা যেতে পারে। এদের কোন বিন্দুগুলোকে যোগ করলে সবচেয়ে প্রকট রেখাটা পাওয়া যাবে সেটা সুক্ষ্মরূপে নির্নয় করতে। আমরা ব্যবহার করব হাফ ট্রান্সফর্ম। ফলাফল পাওয়া যাবে এমন।
চিত্রের এই লাল রেখাটা পোলার ফর্মে পাওয়া যায়। ফলে সে কতরেডিয়ান কোনে আছে সেটাও আমরা পেয়ে যাবো একটা ভেরিয়েবলের মধ্যে। এখন মূল ছবিটাকে স্রেফ তত খানি উলটো দিকে ঘুরিয়ে নিলেই হলো।
বাহ! কেমন সোজা হয়ে গেছে। কোনার দিকে একটু কাটা পড়েছে অবশ্য। ওসব অংশ ছবিটার আকার বাড়িয়ে কমিয়ে ধরে ফেলা যাবে। প্রোগ্রামটা যেহেতু একবার লিখে ফেলেছি। এখন যে কোনো পাতা যেভাবেই, স্ক্যান করে দেওয়া হোক না কেন। এই প্রোগ্রামের হাতে পড়লে ঠিক ঠিক সোজা হয়ে যাবে।
পাইথন আর ওপেনসিভি লাইব্রেরী ব্যবহার করার কারণে এসব করতে তেমন কোনো কষ্টই হয়নি। তবে, এই ডিস্ক্রিট ফুরিয়ার ট্রান্সফর্ম, হাফ-ট্রান্সরর্ম, এবং এজ ডিটেকশন অ্যালগরিদমগুলোর গাণিতিক সৌন্দর্য অতুলনীয়। হায়, এই লেখায় যদি সেগুলো নিয়ে বলতে পারতাম।
মনে করি আমাদের স্ক্যান করা পাতাটি এমন।
এখন, এই অবস্থায় স্ক্যান করা পাতা থেকে টেক্স্ট রিকগনিশন করা মুশকিল হয়ে যাবে। ওদিকে কম্পিউটারের কাছে একটা ছবি কিছু কালো আর সাদা ফোটার সমষ্টি ছাড়া কিছুই নয়। সে কীভাবে বুঝবে কোন দিকে কতটুকু ঘোরালে লেখাগুলো সোজা হবে?
এটা করতে আমরা ব্যবহার করবো ডিস্ক্রিট ফুরিয়ার ট্রান্সফর্ম। তখন যে ফলাফল পাওয়া যাবে সেটা দেখতে এমন।
দেখুন মাঝ খানে একটা সাদা দাগ দেখা যাচ্ছে। ওর মানে হলো ঐ বরাবর হাটলে বারবার সাদা থেকে কালোতে বদলায় পিক্সেলগুলো। এই দাগটা কতডিগ্রি কোনে আছে বের করতে পারলেই ততটুকু উলটো ঘুরিয়ে নিলে কাজ হয়ে যাবে। কিন্তু এই ছবিতে নানান রকম হিজিবিজি ঝিরিঝিরি। এতকিছুর মধ্যে কোন সাদা বিন্দুগুলো কাজের সেটা কম্পিউটারের পক্ষে বোঝা মুশকিল। বাড়তি বিন্দু গুলো দূর করতে তাই, আমরা একটা এজ ডিটেকশন অ্যালগরিদম চালাবো। এই অ্যালগরিদম ছবির যেসব অংশ বেশি বেশি সাদা সেগুলোকে দাগ দিয়ে ঘিরে ফেলে, আর বাকি অংশ মুছে কালো করে দেয়। ফলাফল দাঁড়ায় এমন। অনেকটা ফটোশপের ম্যাজিক সিলেক্টর টুলের মত। এখানে বলে রাখি, ফুরিয়ার ট্রান্সফর্ম করার সুবিধা হলো, ছবিতে যদি কাটা ছেড়া, পোকামাকড়, কাগজে চায়ের কাপের দাগ, ইত্যাদি থাকে তার পরেও, ঠিকই আমাদের উদ্দিষ্ট সাদা দাগটা আমরা পেয়ে যাবো!
এখন অন্যসব হিজিবিজির মধ্যে মাঝের দাগটা বেশ ফুটে উঠেছে! কিন্তু ছবিটাকে স্রেফ একটা কালো গ্রাফ কাগজে সাদা সাদা অনেকগুলো বিন্দু ভাবা যেতে পারে। এদের কোন বিন্দুগুলোকে যোগ করলে সবচেয়ে প্রকট রেখাটা পাওয়া যাবে সেটা সুক্ষ্মরূপে নির্নয় করতে। আমরা ব্যবহার করব হাফ ট্রান্সফর্ম। ফলাফল পাওয়া যাবে এমন।
চিত্রের এই লাল রেখাটা পোলার ফর্মে পাওয়া যায়। ফলে সে কতরেডিয়ান কোনে আছে সেটাও আমরা পেয়ে যাবো একটা ভেরিয়েবলের মধ্যে। এখন মূল ছবিটাকে স্রেফ তত খানি উলটো দিকে ঘুরিয়ে নিলেই হলো।
বাহ! কেমন সোজা হয়ে গেছে। কোনার দিকে একটু কাটা পড়েছে অবশ্য। ওসব অংশ ছবিটার আকার বাড়িয়ে কমিয়ে ধরে ফেলা যাবে। প্রোগ্রামটা যেহেতু একবার লিখে ফেলেছি। এখন যে কোনো পাতা যেভাবেই, স্ক্যান করে দেওয়া হোক না কেন। এই প্রোগ্রামের হাতে পড়লে ঠিক ঠিক সোজা হয়ে যাবে।
পাইথন আর ওপেনসিভি লাইব্রেরী ব্যবহার করার কারণে এসব করতে তেমন কোনো কষ্টই হয়নি। তবে, এই ডিস্ক্রিট ফুরিয়ার ট্রান্সফর্ম, হাফ-ট্রান্সরর্ম, এবং এজ ডিটেকশন অ্যালগরিদমগুলোর গাণিতিক সৌন্দর্য অতুলনীয়। হায়, এই লেখায় যদি সেগুলো নিয়ে বলতে পারতাম।
Cool... :)
ReplyDelete