ইমেজ সেগমেন্টেশনের জন্য থ্রেশোল্ডিং প্রয়োগ

ইমেজ থ্রেশোল্ডিং (Image Thresholding) - জাভা দিয়ে ডিজিটাল ইমেজ প্রসেসিং (Digital Image Processing using Java) - Computer Science

313

ইমেজ সেগমেন্টেশনের জন্য থ্রেশোল্ডিং প্রয়োগ (Applying Thresholding for Image Segmentation)

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

থ্রেশোল্ডিংয়ে, একটি নির্দিষ্ট পিক্সেল মান বা থ্রেশোল্ডের উপর ভিত্তি করে ছবির পিক্সেলগুলো দুইটি ভাগে ভাগ করা হয়:

  • থ্রেশোল্ড মানের চেয়ে বড় পিক্সেল একটি নির্দিষ্ট শ্রেণী হিসেবে চিহ্নিত করা হয়।
  • থ্রেশোল্ড মানের চেয়ে ছোট পিক্সেল অন্য শ্রেণীতে চিহ্নিত করা হয়।

থ্রেশোল্ডিংয়ের প্রকার

  1. বাইনরি থ্রেশোল্ডিং (Binary Thresholding)
    • ছবির পিক্সেলগুলো দুটি শ্রেণীতে বিভক্ত করা হয়: একটি থ্রেশোল্ড মানের উপরে এবং অন্যটি থ্রেশোল্ড মানের নিচে।
  2. অ্যাডাপটিভ থ্রেশোল্ডিং (Adaptive Thresholding)
    • এই পদ্ধতিতে, একটি থ্রেশোল্ড মান সব পিক্সেলের জন্য একই থাকে না। এটি স্থানীয় পরিসরে নির্ধারিত হয়, অর্থাৎ প্রতিটি পিক্সেলের আশেপাশের পিক্সেলগুলির উপর ভিত্তি করে।

১. বাইনরি থ্রেশোল্ডিং (Binary Thresholding)

এটি একটি সাধারণ থ্রেশোল্ডিং পদ্ধতি, যেখানে সমস্ত পিক্সেল দুটি শ্রেণীতে বিভক্ত হয়:

  • থ্রেশোল্ড মানের উপর বা সমান: পিক্সেলটি সাদা (255) হিসাবে চিহ্নিত করা হয়।
  • থ্রেশোল্ড মানের নিচে: পিক্সেলটি কালো (0) হিসাবে চিহ্নিত করা হয়।

উদাহরণ: বাইনরি থ্রেশোল্ডিং

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

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

            // থ্রেশোল্ড মান সেট করা
            int threshold = 128;

            // ইমেজে থ্রেশোল্ড প্রয়োগ
            for (int i = 0; i < image.getWidth(); i++) {
                for (int j = 0; j < image.getHeight(); j++) {
                    Color c = new Color(image.getRGB(i, j));

                    // পিক্সেলের গা dark ন বা উজ্জ্বলতা গণনা করা
                    int red = c.getRed();
                    int green = c.getGreen();
                    int blue = c.getBlue();

                    // গা dark ন ও উজ্জ্বল পিক্সেল একসাথে গণনা করে
                    int grayscale = (red + green + blue) / 3;

                    // থ্রেশোল্ড অনুযায়ী পিক্সেল পরিবর্তন করা
                    if (grayscale > threshold) {
                        image.setRGB(i, j, Color.WHITE.getRGB());
                    } else {
                        image.setRGB(i, j, Color.BLACK.getRGB());
                    }
                }
            }

            // ফলস্বরূপ ছবি সেভ করা
            File outputFile = new File("path/to/save/binary_thresholded_image.jpg");
            ImageIO.write(image, "jpg", outputFile);

            System.out.println("Binary Thresholding Applied and Image Saved!");

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

এখানে, grayscale মান হিসাব করা হয়েছে এবং তারপর ছবির পিক্সেলগুলিকে দুইটি শ্রেণীতে বিভক্ত করা হয়েছে — থ্রেশোল্ড মানের উপরে সাদা এবং নিচে কালো।


২. অ্যাডাপটিভ থ্রেশোল্ডিং (Adaptive Thresholding)

অ্যাডাপটিভ থ্রেশোল্ডিং ছবির স্থানীয় এলাকায় পিক্সেল মানের ভিত্তিতে থ্রেশোল্ড নির্ধারণ করে, যাতে ছবি বিশ্লেষণের সময় প্রতিটি পিক্সেলের আশেপাশের পরিবেশে অটোমেটিকভাবে পরিবর্তন করা যায়।

উদাহরণ: অ্যাডাপটিভ থ্রেশোল্ডিং

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

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

            int windowSize = 15; // অ্যাডাপটিভ উইন্ডোর সাইজ

            // ইমেজে অ্যাডাপটিভ থ্রেশোল্ড প্রয়োগ
            for (int i = windowSize / 2; i < image.getWidth() - windowSize / 2; i++) {
                for (int j = windowSize / 2; j < image.getHeight() - windowSize / 2; j++) {
                    int sumRed = 0, sumGreen = 0, sumBlue = 0;
                    // স্থানীয় উইন্ডো পিক্সেল গুলি সংগ্রহ
                    for (int x = -windowSize / 2; x <= windowSize / 2; x++) {
                        for (int y = -windowSize / 2; y <= windowSize / 2; y++) {
                            Color c = new Color(image.getRGB(i + x, j + y));
                            sumRed += c.getRed();
                            sumGreen += c.getGreen();
                            sumBlue += c.getBlue();
                        }
                    }

                    // স্থানীয় গড় হিসাব করা
                    int localAvgRed = sumRed / (windowSize * windowSize);
                    int localAvgGreen = sumGreen / (windowSize * windowSize);
                    int localAvgBlue = sumBlue / (windowSize * windowSize);

                    // গড়ের সাথে থ্রেশোল্ডিং প্রয়োগ
                    Color c = new Color(image.getRGB(i, j));
                    int grayscale = (c.getRed() + c.getGreen() + c.getBlue()) / 3;

                    if (grayscale > (localAvgRed + localAvgGreen + localAvgBlue) / 3) {
                        image.setRGB(i, j, Color.WHITE.getRGB());
                    } else {
                        image.setRGB(i, j, Color.BLACK.getRGB());
                    }
                }
            }

            // ফলস্বরূপ ছবি সেভ করা
            File outputFile = new File("path/to/save/adaptive_thresholded_image.jpg");
            ImageIO.write(image, "jpg", outputFile);

            System.out.println("Adaptive Thresholding Applied and Image Saved!");

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

এখানে, অ্যাডাপটিভ থ্রেশোল্ডিং প্রয়োগ করার জন্য একটি স্থানীয় উইন্ডো তৈরি করা হয়েছে যা চিত্রের স্থানীয় গড় মান ব্যবহার করে প্রতিটি পিক্সেলের জন্য থ্রেশোল্ড নির্ধারণ করে।


সারসংক্ষেপ

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

Content added By
Promotion

Are you sure to start over?

Loading...