হিস্টোগ্রাম ইকুয়ালাইজেশন

ইমেজ এনহ্যান্সমেন্ট (Image Enhancement Techniques) - জাভা দিয়ে ডিজিটাল ইমেজ প্রসেসিং (Digital Image Processing using Java) - Computer Science

325

হিস্টোগ্রাম ইকুয়ালাইজেশন (Histogram Equalization)

হিস্টোগ্রাম ইকুয়ালাইজেশন হলো একটি ইমেজ প্রসেসিং টেকনিক, যা ইমেজের কনট্রাস্ট বাড়ানোর জন্য ব্যবহৃত হয়। এটি একটি ইমেজের পিক্সেল ভ্যালুগুলোর ডিস্ট্রিবিউশন বা হিস্টোগ্রাম সমানভাবে বিতরণ করতে সহায়ক, যার ফলে ইমেজের উজ্জ্বলতা বা কনট্রাস্ট বাড়ে এবং ডিটেইল আরও স্পষ্ট হয়। এই পদ্ধতিটি বিশেষভাবে গা dark ় বা উজ্জ্বল এলাকায় ভাল কাজ করে।

হিস্টোগ্রাম এবং ইকুয়ালাইজেশন

  • হিস্টোগ্রাম: একটি ইমেজের পিক্সেল ভ্যালু (উজ্জ্বলতা বা রঙ) গুলি কীভাবে বিতরণ হয়েছে, তা দেখায়। এটি একটি গ্রাফ যা প্রতিটি উজ্জ্বলতা স্তরের জন্য পিক্সেলের সংখ্যা বা ঘনত্ব প্রতিনিধিত্ব করে।
  • ইকুয়ালাইজেশন: এই প্রক্রিয়ার মাধ্যমে একটি ইমেজের পিক্সেল ভ্যালুগুলির বিতরণ এমনভাবে পরিবর্তন করা হয় যে এটি পুরো পরিসরের মধ্যে সমানভাবে বিতরণ হয়, অর্থাৎ কম উজ্জ্বল বা গা dark ় অংশ এবং উজ্জ্বল অংশ উভয়ই আরও ভালভাবে দৃশ্যমান হয়।

হিস্টোগ্রাম ইকুয়ালাইজেশন প্রক্রিয়া

হিস্টোগ্রাম ইকুয়ালাইজেশন সাধারণত নিম্নলিখিত ধাপগুলো অনুসরণ করে:

  1. ইমেজের হিস্টোগ্রাম হিসাব করা:
    • প্রথমে, ইমেজের প্রতিটি পিক্সেল ভ্যালু অনুযায়ী একটি হিস্টোগ্রাম তৈরি করা হয়। এটি চিত্রের উজ্জ্বলতার প্রতিটি স্তরের জন্য পিক্সেলের সংখ্যা বা ঘনত্ব নির্ধারণ করে।
  2. কিউমুলেটিভ ডিস্ট্রিবিউশন ফাংশন (CDF) গণনা:
    • একটি হিস্টোগ্রাম থেকে কিউমুলেটিভ ডিস্ট্রিবিউশন ফাংশন (CDF) তৈরি করা হয়, যা প্রতিটি পিক্সেলের জন্য কিউমুলেটিভ ফ্রিকোয়েন্সি বা ঘনত্ব দেখায়।
  3. নতুন পিক্সেল ভ্যালু নির্ধারণ:
    • CDF এর উপর ভিত্তি করে প্রতিটি পিক্সেলের জন্য একটি নতুন উজ্জ্বলতা স্তর নির্ধারণ করা হয়, যা পুরো পরিসরের মধ্যে সুষমভাবে বিতরণ করা হবে।
  4. নতুন ইমেজ তৈরি করা:
    • নতুন পিক্সেল ভ্যালু অনুযায়ী, একটি নতুন ইমেজ তৈরি করা হয়, যেখানে উজ্জ্বলতা সমানভাবে বিতরণ করা হয়েছে।

জাভাতে হিস্টোগ্রাম ইকুয়ালাইজেশন উদাহরণ

নিচে একটি সাধারণ উদাহরণ দেখানো হয়েছে, যেখানে BufferedImage ব্যবহার করে একটি গ্রেস্কেল ইমেজে হিস্টোগ্রাম ইকুয়ালাইজেশন প্রয়োগ করা হয়েছে।

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class HistogramEqualization {
    public static void main(String[] args) {
        try {
            // ইমেজ লোড করা
            File file = new File("path/to/your/image.jpg");
            BufferedImage image = ImageIO.read(file);

            // ইমেজের হিস্টোগ্রাম গণনা
            int width = image.getWidth();
            int height = image.getHeight();
            int[] histogram = new int[256]; // 256 স্তরের জন্য হিস্টোগ্রাম

            // ছবির প্রতিটি পিক্সেলের জন্য হিস্টোগ্রাম তৈরি করা
            for (int i = 0; i < width; i++) {
                for (int j = 0; j < height; j++) {
                    int color = image.getRGB(i, j) & 0xFF; // গ্রেস্কেল ভ্যালু বের করা
                    histogram[color]++;
                }
            }

            // CDF (Cumulative Distribution Function) গণনা করা
            int[] cdf = new int[256];
            cdf[0] = histogram[0];
            for (int i = 1; i < 256; i++) {
                cdf[i] = cdf[i - 1] + histogram[i];
            }

            // ইমেজের সর্বোচ্চ পিক্সেল মানের জন্য স্কেল ফ্যাক্টর
            int minCDF = cdf[0];
            int maxCDF = cdf[255];
            double scale = 255.0 / (maxCDF - minCDF);

            // নতুন ইমেজ তৈরি
            BufferedImage newImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
            for (int i = 0; i < width; i++) {
                for (int j = 0; j < height; j++) {
                    int color = image.getRGB(i, j) & 0xFF; // গ্রেস্কেল ভ্যালু বের করা
                    int newColor = (int) ((cdf[color] - minCDF) * scale);
                    newImage.setRGB(i, j, (newColor << 16) | (newColor << 8) | newColor); // নতুন পিক্সেল সেট করা
                }
            }

            // নতুন ইমেজ সংরক্ষণ করা
            ImageIO.write(newImage, "jpg", new File("path/to/save/equalized_image.jpg"));

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

কোডের ব্যাখ্যা:

  1. ইমেজ লোড: ImageIO.read() মেথড ব্যবহার করে একটি ছবিকে লোড করা হয়।
  2. হিস্টোগ্রাম তৈরি: চিত্রের প্রতিটি পিক্সেল থেকে উজ্জ্বলতার মান (গ্রেস্কেল ভ্যালু) নিয়ে হিস্টোগ্রাম তৈরি করা হয়।
  3. CDF তৈরি: হিস্টোগ্রামের কিউমুলেটিভ ফ্রিকোয়েন্সি গণনা করে CDF তৈরি করা হয়।
  4. নতুন পিক্সেল মান: CDF থেকে নতুন পিক্সেল মান হিসাব করা হয় এবং ইমেজে নতুন মান প্রয়োগ করা হয়।
  5. নতুন ইমেজ তৈরি এবং সংরক্ষণ: ইমেজটি পরিবর্তন করার পরে নতুন চিত্র সংরক্ষণ করা হয়।

সারসংক্ষেপ

হিস্টোগ্রাম ইকুয়ালাইজেশন একটি গুরুত্বপূর্ণ ইমেজ প্রসেসিং টেকনিক যা ছবির কনট্রাস্ট বাড়ানোর জন্য ব্যবহৃত হয়। এটি মূলত ছবির উজ্জ্বলতা স্তরের সুষম বণ্টন নিশ্চিত করে, যা চিত্রের স্পষ্টতা ও বিস্তারিত দৃশ্যমান করতে সহায়ক। ডিজিটাল ইমেজ প্রসেসিংয়ে এটি একটি অপরিহার্য পদ্ধতি, বিশেষ করে সঠিক এবং কার্যকর চিত্র বিশ্লেষণ এবং উন্নতির জন্য।

Content added By
Promotion

Are you sure to start over?

Loading...