Image Processing এর হাতেখড়ি

Image Processing এর হাতেখড়ি

আজ আমরা আলোচনা করব image processing নিয়ে। আমরা আজ কিছু basic topic নিয়ে আলোচনা করব। চলুন শুরু করা যাক।
আমরা সবাই আশাকরি কমবেশি image processing বা computer vision বা machine vision এই শব্দ গুলার সাথে পরিচিত। পরিচিত না থাকলেও সমস্যা নেই। image processing বা computer vision বা machine vision এগুলো আসলে কি?……. বা এগুলো দিয়ে কি করা যায়?…… Image processing একটা বড় sector । আমরা আমাদের দৈনন্দিন জীবনের অনেক জায়গায় জেনে বা না জেনে image processing ব্যবহার করছি। এই যেমন ধরুন আপনি একটা ছবি তোলার পরে Photoshop বা বিভিন্ন editing software ব্যবহার করেন ছবিটি সুন্দর করার জন্য, বা ধরুন আপনি আপনার আর আপনার বন্ধুদের ছবি facebook এ upload করলে দেখতে পাবেন যে facebook automatically suggestion দিবে আপনার নির্দিষ্ট কোন বন্ধুটিকে tag করার জন্য বা অনেক দোকানে এখন দেখা যায় যে আপনি কিছু কিনার পরে দোকানী পণ্যটির দাম barcode reader দিয়ে পণ্যের গা থেকে নেয় বা আপনি যখন SIM registration করেন তখন আপনার finger print মিলানো হয়, এগুলোর সব কিছুর পিছনেই আছে image processing. শুধু এগুলোই নয় দৈনন্দিন জীবনে এমন অনেক হাজারও জায়গায় image processing ব্যবহৃত হচ্ছে।
এখন আশা যাক image processing কি? Image কে modify করা বা এর থেকে তথ্য নেওয়ার প্রক্রিয়াকেই মূলত image processing বলে। যেমন উপরের প্রথম উদাহরনে যেটা করা হয়েছে তা হল image modify। পরের উদাহরনে যেটা বলা হলো সেটা হল face recognition এর উদাহরন অর্থাৎ আপনার ছবি থেকে মুখের ছবির তথ্যের সাথে আগে থেকে database এ থাকা ছবির তথ্য মিলানো।
Image processing এর সাথে artificial intelligence, robotics, cryptography ইত্যাদি জড়িত। আমরা ধীরে ধীরে image processing এর বিভিন্ন শাখা এবং এর প্রয়োগ শিখাব।
এখন চলুন জেনে আসি একটা ছবি আসলে কি?…. বা আমাদের computer একটা ছবি কে কিভাবে দেখে?…… আমাদের computer একটা ছবি কে মূলত একটা matrix এর মত দেখে অর্থাৎ computer এর কাছে একটা ছবি মানে একটা matrix. রঙিন ছবির ক্ষেত্রে ম্যাট্রিক্স এর প্রতিটা position এ তিনটা মান(3 channel) থাকে। আমরা জানি যে মৌলিক রঙ তিনটি লাল, সবুজ আর নীল। আর এই তিনটি রঙ এর সমন্বয়ই অন্য রঙ তৈরি করে। আমাদের ছবির matrix এর প্রতিটা position এর যে তিনটা মান থাকে তা হল এই লাল, নীল আর সবুজ। আর এই প্রতিটা position কে বলে pixel. আবার সাদা কালো ছবির জন্য প্রতিটা pixel এর জন্য মান থাকে তিনটা না মাত্র একটা(single channel)। এখন একটা প্রশ্ন মনে আসতেই পারে যে আমি বারবার যে pixel এর মানের কথা বলছি এগুলো আসলে কিধরনের মান?…… আমাদের ছবিটা যদি 8bit ছবি হয় তাহলে এই pixel গুলার প্রতিটার মান সাদা কালো ছবি এর জন্য ০ থেকে ২৫৫ এর মধ্যে যে কোন মান হবে। আর রঙিন ছবির ক্ষেত্রে প্রতিটা pixel এ যে তিনটা মান থাকে সেগুলার প্রতিটির মান ০ থেকে ২৫৫ এর মধ্যে হয়। তাহলে আমরা দেখতে পাচ্ছি যে প্রতিটা ছবি অসংখ্য pixel এর সমন্বয় এ তৈরি। আচ্ছা আমরা কি pixel আলাদা ভাবে দেখতে পারি?……… হাঁ পারি, আমারা যদি একটা ছবি কে zoom করতে থাকি তাহলে আমরা এক সময় নিচের ছবির মত কিছু box দেখতে পারব।

এগুলই মূলত একেকটা pixel. ভাল করে খেয়াল করলে দেখা যাবে যে প্রতিটা pixel মূলত একটা রং দিয়েই তৈরি।
এখন চলুন যাচাই করে দেখি যে ছবি কি আসলেই matrix কিনা?…… এজন্য আমরা MATLB এর সাহায্য নিব। image processing এর জন্য অনেক গুলো পথ আছে আমরা মূলত MATLAB আর OpenCV-python ব্যাবহার করব। নতুনদের শিখার জন্য এই দুইটা মাধ্যম ভালো উপযোগী। আমার সম্পূর্ন tutorial series এ আমি MATLAB 2017a, python 2.7.13 এবং opencv 2.4.11 ব্যাবহার করব। OpenCV এবং python install করার পদ্ধতি এখানে। প্রথমে MATLAB প্রয়োগ করি। যেহেতু আমরা বলছি যে সাদা কালো ছবি বা gray scale ছবি মূলত single chanel বা প্রতি টা pixel এ একটাই মান থাকে তাই চলুন একটা matrix ধরি,

img=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0];

এখন যদি আমরা এটা কে ছবি আকারে দেখতে চাই তাহলে কি দেখতে পাড়ব আন্দাজ করতে পারছি কি?……
উপরের আলোচনা অনুযায়ী যে মান গুলো ০ সেগুলো কালো দেখা উচিত আর যে গুলো ২৫৫ সেগুলো সাদা দেখা উচিত। তাহলে পুরো code টা run করে দেখি –

clear all; close all; clc;
img=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0,
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 0 0];
figure, imshow(img)

আর এটার output হবে,

 

এক ই কাজ যখন OpenCV-python এ করব তখন সেটা হবে,

import cv2 #import opencv module
import numpy as np #import numpy module
img=np.asarray([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 0, 0]],dtype="uint8")

cv2.imshow(“imageShow”,img)
cv2.waitKey(0)
cv2.destroyAllWindows()

আর output,

আজকের মত এটুকুই পরবর্তী দিন আরও মজার কিছু কাজ করব। প্রতিদিন আমরা ছোট ছোট কিছু project করবো এবং শেষে একটা বড় project করবো যেমন আগামী দিন আমরা একটা বাচ্চাদের drawing pad আর একটা editing software তৈরি করব। আমাদের চূড়ান্ত উদ্দেশ্য হল, এই tutorial series এর পর সবাই এমন একটা intelligent robot বানাতে পাড়ব যেটি কিনা মানুষ কে চিন্তে পারবে, কথা বলতে পারবে, লিখা পরতে পারবে । আমাদের মধ্যে যারা image processing এর অন্যান্য দিক যেমন watermarking বা vission related smart app নিয়ে কাজ করতে আগ্রহী তাদের জন্যও এটি সহায়ক হবে।

 -ধন্যবাদ সকলকে ।

One thought on “Image Processing এর হাতেখড়ি

  1. Mahmudul Russel Reply

    First of all, is an excellent starting for image processing.

    Someone may experience numpy or cv2 import issue
    like “numpy.core.multiarray failed to import”
    Solve:
    If any one really start to learn image processing and python deeply, i recommend to install Anaconda IDE for full development environment. Then you do not need to think any other extra library package(but need to install openCV). Moreover, its totally free from the issue of the numpy version.
    >>Download Anaconda , (must install 2.7 version)
    https://www.continuum.io/downloads
    >>Instruction
    https://docs.continuum.io/anaconda/install-windows
    >>Type spyder and open it
    >> For checking the successful installation of Python and all packages run this code
    http://www.southampton.ac.uk/~fangohr/blog/code/python/soton-test-python-installation-2013.py
    >> Code will run successfully and show all installed version with graph.
    >> Enjoy.

Leave a Reply

Your email address will not be published. Required fields are marked *