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

যে ধরন আমরা বস্তু চেনি, কম্পিউটার অ্যালগরিদমও লক্ষ লক্ষ ইমেজ দেখে জেনেরালাইজ করে এবং নতুন ইমেজ জাজ করতে পারে।
কম্পিউটার প্রতিটি ইমেজকে ২D অ্যারে আকারে সংখ্যা (পিক্সেল) হিসেবে দেখে। ইমেজে অবজেক্ট চেনার জন্য স্পেশাল কৃত্রিম নিউরাল নেটওয়ার্ক: কনভোলিউশন নিউরাল নেটওয়ার্ক (CNN) ব্যবহার করা হয়। CNN-র সবচেয়ে গুরুত্বপূর্ণ অপারেশন হলো কনভোলিউশন।
CNN-এ প্রতিটি লেয়ার ওয়িডথ, হাইট ও ডেপথ-এ আর্গানাইজড থাকে। কনভোলিউশন দুটি ফাংশনকে মিলিয়ে তৃতীয় ফাংশন তৈরি করে (দুটি তথ্যের সেট মার্জ করে)। অর্থাৎ একটি ইমেজ কনভোলিউশনে আমরা শুধু দুটি ম্যাট্রিক্স এলিমেন্ট-ওয়াইজ গুন করে যোগফল নেই।
ইমেজ প্রসেসিং-এ কনভোলিউশন তিন ধাপের প্রক্রিয়া:
- ইনপুট ইমেজ নিন।
- কার্নেল ম্যাট্রিক্স যা ইনপুট ইমেজে প্রয়োগ করব।
- ফাইনাল ইমেজ যেখানে ইনপুট ইমেজ ও কার্নেলের কনভোলিউশনের আউটপুট সংরক্ষিত থাকবে।
নিচে OpenCV দিয়ে সোবেল ফিল্টারের ছোট বাস্তবায়ন দেওয়া হলো, যা এজ ডিটেকশনের জন্য একটি ইমেজ প্রসেসিং ফিল্টার।
উদাহরণ কোড
import cv2
import numpy as np
img = cv2.imread('beach.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY).astype(float)
edge_x = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
edge_y = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
edge = np.sqrt(edge_x ** 2 + edge_y ** 2)
# ইমেজ 0..255 কালার স্পেসে নরমালাইজ করা যায়
cv2.imwrite('beach_convol.jpg', edge)
ইনপুট ইমেজ

আউটপুট ইমেজ (এজ ডিটেক্টেড)
