হিস্টোগ্রাম একটি ছবির পিক্সেল ইন্টেনসিটি মানগুলোর ফ্রিকোয়েন্সি দেখায়। একটি ইমেজ হিস্টোগ্রামে, X-অক্ষটি গ্রে লেভেল ইন্টেনসিটি এবং Y-অক্ষটি সেই ইন্টেনসিটিগুলোর ফ্রিকোয়েন্সি দেখায়।
হিস্টোগ্রাম ইক্যুয়ালাইজেশন একটি ছবির কন্ট্রাস্ট বেড়াতে সাহায্য করে, ইন্টেনসিটি রেঞ্জকে প্রসারিত করে। আপনি একটি দেয়া ছবির হিস্টোগ্রাম সমান করতে equalizeHist() ফাংশন ব্যবহার করতে পারেন।
এই ফাংশনের বেসিক সিনট্যাক্স:
সিনট্যাক্স
equalizeHist(Source Matrix, Destination Matrix).
এই প্রোগ্রামে, এটি একটি গ্রেস্কেল ইমেজকে ইক্যুয়ালাইজ করে। মানে সিঙ্গেল চ্যানেলের পিক্সেল মান সমান করা হয়। কিন্তু যখন আমরা এই ফাংশনটি কালার ইমেজে প্রয়োগ করি, তবে সোর্স এবং ডেস্টিনেশন ম্যাট্রিক্সের বদলে আলাদা চ্যানেলগুলো ডিফাইন করতে হয়। নিচের প্রোগ্রামে আমরা কালার ইমেজে equalizeHist() এর অ্যাপ্লিকেশন দেখব।
OpenCV-এ equalizeHist() ফাংশন প্রদর্শন করার প্রোগ্রাম
#include<iostream>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main(int argc, const char** argv) {
Mat original; // একটি ম্যাট্রিক্স ঘোষণা
original = imread("sky.jpg"); // ইমেজ লোড
vector<Mat> channels; // প্রতিটি চ্যানেল আলাদা অ্যারেতে সংরক্ষণের জন্য ভেক্টর
Mat hist; // একটি ম্যাট্রিক্স ঘোষণা
cvtColor(original, hist, COLOR_BGR2YCrCb); // BGR থেকে YCrCB-এ রূপান্তর
split(hist, channels); // চ্যানেলগুলো ভাগ করা
equalizeHist(channels[2], channels[2]); // ২ নম্বর চ্যানেলে হিস্টোগ্রাম ইক্যুয়ালাইজার প্রয়োগ
Mat histeql; // একটি ম্যাট্রিক্স ঘোষণা
merge(channels, hist); // ইক্যুয়ালাইজড চ্যানেল আসল ম্যাট্রিক্সে মার্জ
cvtColor(hist, histeql, COLOR_YCrCb2BGR); // আবার BGR-এ রূপান্তর
namedWindow("original"); // আসল ইমেজ দেখানোর উইন্ডো
namedWindow("hist"); // এডিটেড ইমেজ দেখানোর উইন্ডো
imshow("original", original); // আসল ইমেজ দেখানো
imshow("hist", histeql); // এডিটেড ইমেজ দেখানো
waitKey(0); // কীস্ট্রোক অপেক্ষা
return 0;
}
আউটপুট
