Skill

ইমেজ থ্রেশোল্ডিং (Image Thresholding)

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

373

ইমেজ থ্রেশোল্ডিং (Image Thresholding)

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


থ্রেশোল্ডিং এর প্রকারভেদ

১. সিম্পল বা গ্লোবাল থ্রেশোল্ডিং (Simple or Global Thresholding)

  • বর্ণনা: এই টেকনিকে একটি নির্দিষ্ট স্থির মান (থ্রেশোল্ড) নির্ধারণ করা হয়, যার উপরে বা নিচে থাকা পিক্সেলগুলিকে দুটি শ্রেণিতে বিভক্ত করা হয়।
  • প্রক্রিয়া:
    • পিক্সেলের মান যদি থ্রেশোল্ডের চেয়ে বেশি হয়, তবে সেটি সাদা (১)।
    • পিক্সেলের মান যদি থ্রেশোল্ডের চেয়ে কম হয়, তবে সেটি কালো (০)।
  • ব্যবহার: লো-কনট্রাস্ট ইমেজ এবং যেখানে ছবির আলো প্রায় সমান।
import java.awt.image.BufferedImage;
import java.awt.Color;

public class GlobalThresholding {
    public static BufferedImage applyGlobalThreshold(BufferedImage image, int threshold) {
        int width = image.getWidth();
        int height = image.getHeight();
        BufferedImage binaryImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_BINARY);

        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                Color color = new Color(image.getRGB(x, y));
                int grayValue = (color.getRed() + color.getGreen() + color.getBlue()) / 3;

                if (grayValue > threshold) {
                    binaryImage.setRGB(x, y, Color.WHITE.getRGB());
                } else {
                    binaryImage.setRGB(x, y, Color.BLACK.getRGB());
                }
            }
        }
        return binaryImage;
    }
}

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

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

৩. ওৎসু থ্রেশোল্ডিং (Otsu's Thresholding)

  • বর্ণনা: ওৎসু থ্রেশোল্ডিং একটি স্বয়ংক্রিয় থ্রেশোল্ডিং টেকনিক যা ছবির পিক্সেল ভ্যালুগুলোর উপর ভিত্তি করে সেরা থ্রেশোল্ড মান নির্ধারণ করে।
  • প্রক্রিয়া: পিক্সেল ভ্যালুগুলোর মধ্যে পরিবর্তনশীলতা বিশ্লেষণ করে এমন একটি থ্রেশোল্ড নির্ধারণ করা হয় যা ক্লাসের মধ্যে পার্থক্য সর্বাধিক করে।
  • ব্যবহার: যেখানে ছবি থেকে স্বয়ংক্রিয়ভাবে থ্রেশোল্ড নির্ধারণ করতে হয়।
import java.awt.image.BufferedImage;
import java.awt.Color;

public class OtsuThresholding {
    public static int calculateOtsuThreshold(BufferedImage image) {
        int[] histogram = new int[256];
        int width = image.getWidth();
        int height = image.getHeight();

        // হিস্টোগ্রাম তৈরী
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                int grayValue = new Color(image.getRGB(x, y)).getRed();
                histogram[grayValue]++;
            }
        }

        // ওৎসু থ্রেশোল্ড নির্ধারণ
        int totalPixels = width * height;
        float sum = 0;
        for (int i = 0; i < 256; i++) {
            sum += i * histogram[i];
        }

        float sumB = 0;
        int backgroundWeight = 0;
        int foregroundWeight = 0;
        float maxVariance = 0;
        int threshold = 0;

        for (int i = 0; i < 256; i++) {
            backgroundWeight += histogram[i];
            if (backgroundWeight == 0) continue;
            foregroundWeight = totalPixels - backgroundWeight;
            if (foregroundWeight == 0) break;

            sumB += i * histogram[i];
            float meanBackground = sumB / backgroundWeight;
            float meanForeground = (sum - sumB) / foregroundWeight;
            float betweenClassVariance = backgroundWeight * foregroundWeight * (meanBackground - meanForeground) * (meanBackground - meanForeground);

            if (betweenClassVariance > maxVariance) {
                maxVariance = betweenClassVariance;
                threshold = i;
            }
        }

        return threshold;
    }
}

ইমেজ থ্রেশোল্ডিং এর ব্যবহার ক্ষেত্র

  1. অবজেক্ট ডিটেকশন: ছবি থেকে নির্দিষ্ট অবজেক্ট এবং ব্যাকগ্রাউন্ড আলাদা করা।
  2. প্যাটার্ন রিকগনিশন: বিভিন্ন প্যাটার্ন এবং অবজেক্ট শনাক্ত করার জন্য থ্রেশোল্ডিং করা হয়।
  3. বায়োমেট্রিক্স: ফিঙ্গারপ্রিন্ট বা রেটিনা স্ক্যানের ছবি থেকে নির্দিষ্ট বৈশিষ্ট্য সনাক্তকরণ।
  4. স্বয়ংক্রিয় যানবাহন: রাস্তার চিহ্ন বা সিগন্যাল শনাক্ত করতে থ্রেশোল্ডিং ব্যবহার করা হয়।

থ্রেশোল্ডিং করার সুবিধা এবং চ্যালেঞ্জ

সুবিধা

  • সহজেই অবজেক্ট এবং ব্যাকগ্রাউন্ড পৃথক করা যায়।
  • কম্পিউটেশনের জন্য তেমন বেশি সময় লাগে না।
  • জটিল ছবির অংশকে সরলীকৃত করে।

চ্যালেঞ্জ

  • আলোর পার্থক্যের কারণে থ্রেশোল্ড মান স্থির করা কঠিন হতে পারে।
  • অ্যাডাপটিভ থ্রেশোল্ডিংয়ের জন্য অনেক কম্পিউটেশনের প্রয়োজন।
  • ওৎসু থ্রেশোল্ডিং ছোট ছবির জন্য ভালো কাজ করলেও বড় এবং জটিল ছবির জন্য অনেক সময় গ্রহণ করতে পারে।

সারসংক্ষেপ

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

Content added By

থ্রেশোল্ডিং এর ধারণা এবং প্রয়োজনীয়তা (Concept and Necessity of Thresholding)

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


থ্রেশোল্ডিং এর ধারণা

থ্রেশোল্ডিং একটি প্রক্রিয়া যেখানে প্রতিটি পিক্সেলকে একটি নির্দিষ্ট থ্রেশোল্ড মানের ভিত্তিতে সাদা বা কালো রঙে পরিবর্তন করা হয়। এই প্রক্রিয়ায়, একটি নির্দিষ্ট থ্রেশোল্ড মান নির্ধারণ করা হয়, এবং পিক্সেলটির মান যদি থ্রেশোল্ডের চেয়ে বেশি হয় তবে সেটিকে সাদা, এবং কম হলে সেটিকে কালো করা হয়।

থ্রেশোল্ডিং ফর্মুলা

উদাহরণস্বরূপ, যদি T থ্রেশোল্ড মান হয় এবং I(x, y) পিক্সেলের মান হয়, তবে থ্রেশোল্ডিং প্রক্রিয়া নিম্নলিখিতভাবে কাজ করে:

\[
I_{\text{threshold}}(x, y) =
\begin{cases}
255 & \text{if } I(x, y) > T \
0 & \text{if } I(x, y) \leq T
\end{cases}
\]

এখানে, I_threshold(x, y) থ্রেশোল্ড প্রয়োগের পর পিক্সেলের মান, যেখানে 255 সাদা এবং 0 কালো নির্দেশ করে।


থ্রেশোল্ডিং এর প্রয়োজনীয়তা

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

থ্রেশোল্ডিং এর ধরন

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

উদাহরণ (জাভা কোড):

নিচে একটি সাধারণ থ্রেশোল্ডিং পদ্ধতি দেখানো হয়েছে যেখানে নির্দিষ্ট থ্রেশোল্ড মান ব্যবহার করে ছবির পিক্সেলগুলোকে সাদা এবং কালো রঙে রূপান্তর করা হয়েছে।

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

public class ThresholdingExample {
    public static void main(String[] args) {
        try {
            BufferedImage img = ImageIO.read(new File("path/to/your/image.jpg"));
            int threshold = 128; // থ্রেশোল্ড মান (0-255)

            for (int x = 0; x < img.getWidth(); x++) {
                for (int y = 0; y < img.getHeight(); y++) {
                    int rgb = img.getRGB(x, y);
                    int red = (rgb >> 16) & 0xff;
                    int green = (rgb >> 8) & 0xff;
                    int blue = rgb & 0xff;
                    int gray = (red + green + blue) / 3;

                    if (gray > threshold) {
                        img.setRGB(x, y, 0xFFFFFF); // সাদা
                    } else {
                        img.setRGB(x, y, 0x000000); // কালো
                    }
                }
            }

            ImageIO.write(img, "jpg", new File("path/to/your/thresholded_image.jpg"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

সারসংক্ষেপ

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

Content added By

সিম্পল থ্রেশোল্ডিং এবং Otsu’s থ্রেশোল্ডিং

থ্রেশোল্ডিং একটি মৌলিক এবং গুরুত্বপূর্ণ ইমেজ প্রসেসিং টেকনিক যা একটি গ্রেস্কেল ইমেজ থেকে পিক্সেলগুলির মধ্যে সীমারেখা (boundary) চিহ্নিত করে। থ্রেশোল্ডিংয়ের মাধ্যমে, আমরা চিত্রের মধ্যে কোনো নির্দিষ্ট রঙের (বা উজ্জ্বলতা) স্তরের ভিত্তিতে পিক্সেলগুলোকে দুটি শ্রেণীতে ভাগ করতে পারি: যেমন foreground (প্রধান বিষয়) এবং background (পটভূমি)। এটি প্রধানত বাইনারি ইমেজ তৈরি করতে ব্যবহৃত হয়, যেখানে পিক্সেলগুলি দুটি মান (সাদা এবং কালো) ধারণ করে।

এখানে দুটি প্রধান থ্রেশোল্ডিং টেকনিক নিয়ে আলোচনা করা হয়েছে:

  1. সিম্পল থ্রেশোল্ডিং (Simple Thresholding)
  2. Otsu's থ্রেশোল্ডিং (Otsu's Thresholding)

১. সিম্পল থ্রেশোল্ডিং (Simple Thresholding)

বর্ণনা: সিম্পল থ্রেশোল্ডিং হল একটি মৌলিক থ্রেশোল্ডিং পদ্ধতি যেখানে একটি নির্দিষ্ট থ্রেশোল্ড মান নির্ধারণ করা হয়। এরপর, ইমেজের প্রতিটি পিক্সেলের উজ্জ্বলতা বা গ্রেস্কেল ভ্যালু এই থ্রেশোল্ড মানের সাথে তুলনা করা হয়। যদি পিক্সেলের মান থ্রেশোল্ডের চেয়ে বেশি হয়, তবে সেই পিক্সেলটি 255 (সাদা) হিসাবে সেট করা হয়, এবং যদি কম হয়, তবে সেটি 0 (কালো) হিসাবে সেট করা হয়।

ফর্মুলা:

\[
T(x, y) =
\begin{cases}
255 & \text{if } I(x, y) > T \
0 & \text{if } I(x, y) \leq T
\end{cases}
\]

  • যেখানে, \( I(x, y) \) হল পিক্সেলের ইনপুট গ্রেস্কেল মান, \( T \) হল থ্রেশোল্ড মান, এবং \( T(x, y) \) হল আউটপুট পিক্সেল (বাইনারি মান)।

Java কোড (Simple Thresholding):

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

public class SimpleThresholding {
    public static void main(String[] args) {
        try {
            // ইমেজ লোড করা
            BufferedImage image = ImageIO.read(new File("path/to/your/image.jpg"));
            int width = image.getWidth();
            int height = image.getHeight();
            int threshold = 128; // থ্রেশোল্ড মান (0-255)

            // বাইনারি ইমেজ তৈরি করা
            for (int i = 0; i < width; i++) {
                for (int j = 0; j < height; j++) {
                    int pixel = image.getRGB(i, j);
                    int red = (pixel >> 16) & 0xff;
                    int green = (pixel >> 8) & 0xff;
                    int blue = pixel & 0xff;
                    
                    // গ্রেস্কেল মান গণনা
                    int gray = (int)(0.299 * red + 0.587 * green + 0.114 * blue);

                    // থ্রেশোল্ডিং প্রয়োগ
                    if (gray > threshold) {
                        image.setRGB(i, j, 0xFFFFFF); // সাদা
                    } else {
                        image.setRGB(i, j, 0x000000); // কালো
                    }
                }
            }

            // ফলস্বরূপ বাইনারি ইমেজ সংরক্ষণ করা
            ImageIO.write(image, "jpg", new File("path/to/save/binary_image.jpg"));

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

২. Otsu’s থ্রেশোল্ডিং (Otsu's Thresholding)

বর্ণনা: Otsu’s থ্রেশোল্ডিং একটি স্বয়ংক্রিয় থ্রেশোল্ডিং টেকনিক যা ছবির ইতিহাস (histogram) থেকে সেরা থ্রেশোল্ড মান খুঁজে বের করে। এটি একটি অ্যালগরিদম যা দুটি ক্লাসের মধ্যে সর্বোচ্চ ভ্যারিয়েন্স (inter-class variance) খোঁজে এবং তার মাধ্যমে একটি উপযুক্ত থ্রেশোল্ড মান নির্ধারণ করে। এটি মূলত সিম্পল থ্রেশোল্ডিংয়ের তুলনায় আরও কার্যকরী, বিশেষত যখন ছবির উজ্জ্বলতা বা কনট্রাস্টে অনেক পার্থক্য থাকে।

Otsu's থ্রেশোল্ডিং ফর্মুলা:

  1. Histogram তৈরি করুন এবং তারপরে প্রতিটি থ্রেশোল্ডের জন্য intra-class variance এবং inter-class variance গণনা করুন।
  2. Otsu’s criterion অনুসারে, সেরা থ্রেশোল্ড \( T \) হবে যেখানে inter-class variance সর্বাধিক হবে।

Java কোড (Otsu’s Thresholding):

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

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

            // হিস্টোগ্রাম তৈরি করা
            int[] histogram = new int[256];
            for (int i = 0; i < width; i++) {
                for (int j = 0; j < height; j++) {
                    int pixel = image.getRGB(i, j);
                    int red = (pixel >> 16) & 0xff;
                    int green = (pixel >> 8) & 0xff;
                    int blue = pixel & 0xff;
                    int gray = (int)(0.299 * red + 0.587 * green + 0.114 * blue);
                    histogram[gray]++;
                }
            }

            // Otsu’s Thresholding অনুসারে থ্রেশোল্ড খুঁজে বের করা
            int totalPixels = width * height;
            float sumTotal = 0;
            for (int i = 0; i < 256; i++) {
                sumTotal += i * histogram[i];
            }

            float sumBackground = 0;
            int weightBackground = 0;
            int weightForeground = 0;
            float maxVariance = 0;
            int threshold = 0;

            for (int t = 0; t < 256; t++) {
                weightBackground += histogram[t];
                if (weightBackground == 0) continue;

                weightForeground = totalPixels - weightBackground;
                if (weightForeground == 0) break;

                sumBackground += (float) (t * histogram[t]);

                float meanBackground = sumBackground / weightBackground;
                float meanForeground = (sumTotal - sumBackground) / weightForeground;

                float betweenClassVariance = weightBackground * weightForeground * (meanBackground - meanForeground) * (meanBackground - meanForeground);

                if (betweenClassVariance > maxVariance) {
                    maxVariance = betweenClassVariance;
                    threshold = t;
                }
            }

            // Otsu’s থ্রেশোল্ড মান প্রয়োগ করা
            for (int i = 0; i < width; i++) {
                for (int j = 0; j < height; j++) {
                    int pixel = image.getRGB(i, j);
                    int red = (pixel >> 16) & 0xff;
                    int green = (pixel >> 8) & 0xff;
                    int blue = pixel & 0xff;
                    int gray = (int)(0.299 * red + 0.587 * green + 0.114 * blue);

                    if (gray > threshold) {
                        image.setRGB(i, j, 0xFFFFFF); // সাদা
                    } else {
                        image.setRGB(i, j, 0x000000); // কালো
                    }
                }
            }

            // ফলস্বরূপ বাইনারি ইমেজ সংরক্ষণ
            ImageIO.write(image, "jpg", new File("path/to/save/otsu_image.jpg"));

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

সারসংক্ষেপ:

  1. সিম্পল থ্রেশোল্ডিং:
    • এটি সহজতম থ্রেশোল্ডিং পদ্ধতি, যেখানে একটি নির্দিষ্ট থ্রেশোল্ড মান ব্যবহার করে পিক্সেলগুলিকে বাইনারি ক্লাসে বিভক্ত করা হয় (সাদা এবং কালো)।
  2. Otsu's থ্রেশোল্ডিং:
    • এটি একটি উন্নত থ্রেশোল্ডিং পদ্ধতি যা ইমেজের হিস্টোগ্রাম বিশ্লেষণ করে সেরা থ্রেশোল্ড মান খুঁজে বের করে, যা ইমেজের সঠিক ভ্যালু বিভাজন নিশ্চিত করে।

যেখানে সিম্পল থ্রেশোল্ড

িং সহজ এবং দ্রুত কাজ করে, সেখানে Otsu's থ্রেশোল্ডিং বেশি কার্যকরী যখন ইমেজের উজ্জ্বলতা বা কনট্রাস্টের অনেক পার্থক্য থাকে।

Content added By

ইমেজ সেগমেন্টেশনের জন্য থ্রেশোল্ডিং প্রয়োগ (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...