Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <opencv2/opencv.hpp>
- using namespace std;
- using namespace cv;
- void calculateHistogram(const Mat& image, vector<int>& histogram) {
- // Инициализация гистограммы
- histogram.assign(256, 0);
- // Подсчет значений гистограммы
- for (int i = 0; i < image.rows; ++i) {
- for (int j = 0; j < image.cols; ++j) {
- int pixelValue = static_cast<int>(image.at<uchar>(i, j));
- histogram[pixelValue]++;
- }
- }
- }
- //void equalizeHistogram(Mat& image, const vector<int>& histogram) {
- // // Вычисление кумулятивной функции распределения
- // vector<int> cumulativeHistogram(256, 0);
- // cumulativeHistogram[0] = histogram[0];
- // for (int i = 1; i < 256; ++i) {
- // cumulativeHistogram[i] = cumulativeHistogram[i - 1] + histogram[i];
- // }
- //
- // // Эквализация изображения
- // for (int i = 0; i < image.rows; ++i) {
- // for (int j = 0; j < image.cols; ++j) {
- // int pixelValue = static_cast<int>(image.at<uchar>(i, j));
- // int equalizedValue = static_cast<int>(255 * cumulativeHistogram[pixelValue] / (image.rows * image.cols));
- // image.at<uchar>(i, j) = static_cast<uchar>(equalizedValue);
- // }
- // }
- //}
- void hz(Mat image, vector<int> gist)
- {
- int min = gist[0];
- int max = gist[255];
- for (int i = 0; i < 256; i++)
- gist[i] -= min;
- for (int i = 0; i < 256; i++)
- gist[i] /= max;
- for (int i = 0; i < 256; i++)
- gist[i] *= 255;
- }
- void equalizeHistogram(Mat& image, const vector<int>& histogram)
- {
- // Вычисление кумулятивной функции распределения
- int k = 256;
- vector<int> hist(k, 0);
- for (int i = 0; i < image.rows; ++i)
- for (int j = 0; j < image.cols; ++j)
- {
- int pixelValue = static_cast<int>(image.at<uchar>(i, j));
- hist[pixelValue]++;
- }
- for (int i = 1; i < k; ++i)
- hist[i] = hist[i - 1] + hist[i];
- for (int i = 0; i < k; i++)
- {
- hist[i] *= 255;
- hist[i] /= (image.rows * image.cols);
- }
- for (int i = 0; i < image.rows; ++i)
- for (int j = 0; j < image.cols; ++j)
- {
- int pixelValue = static_cast<int>(image.at<uchar>(i, j));
- image.at<uchar>(i, j) = hist[pixelValue];
- }
- }
- int main() {
- // Загрузка изображения
- Mat image = imread("your_image.jpg", IMREAD_GRAYSCALE);
- if (image.empty()) {
- cerr << "Could not open or find the image." << endl;
- return -1;
- }
- //// Вычисление и вывод исходной гистограммы
- vector<int> histogram;
- //calculateHistogram(image, histogram);
- //cout << "Original Histogram:" << endl;
- //for (int i = 0; i < 256; ++i) {
- // cout << i << ": " << histogram[i] << endl;
- //}
- // Эквализация гистограммы
- equalizeHistogram(image, histogram);
- // Вычисление и вывод эквализированной гистограммы
- calculateHistogram(image, histogram);
- cout << "\nEqualized Histogram:" << endl;
- for (int i = 0; i < 256; ++i) {
- cout << i << ": " << histogram[i] << endl;
- }
- //hz(image, histogram);
- // Отображение изображения с эквализированной гистограммой
- imshow("Equalized Image", image);
- waitKey(0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement