মিডিয়ান ফিল্টার, গাউসিয়ান ব্লার, এবং ল্যাপ্লেসিয়ান ফিল্টার

ইমেজ ফিল্টারিং এবং ফিল্টার ডিজাইন (Image Filtering and Filter Design) - জাভা দিয়ে ডিজিটাল ইমেজ প্রসেসিং (Digital Image Processing using Java) - Computer Science

304

মিডিয়ান ফিল্টার, গাউসিয়ান ব্লার, এবং ল্যাপ্লেসিয়ান ফিল্টার

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

১. মিডিয়ান ফিল্টার (Median Filter)

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

উদাহরণ: মিডিয়ান ফিল্টার

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

public class MedianFilter {
    public static BufferedImage applyMedianFilter(BufferedImage image) {
        int width = image.getWidth();
        int height = image.getHeight();
        BufferedImage resultImage = new BufferedImage(width, height, image.getType());

        for (int x = 1; x < width - 1; x++) {
            for (int y = 1; y < height - 1; y++) {
                // Gather pixel values in the 3x3 neighborhood
                int[] pixels = new int[9];
                int index = 0;
                for (int dx = -1; dx <= 1; dx++) {
                    for (int dy = -1; dy <= 1; dy++) {
                        pixels[index++] = image.getRGB(x + dx, y + dy);
                    }
                }

                // Sort pixel values to get the median
                java.util.Arrays.sort(pixels);
                int median = pixels[4]; // The median is the middle value in sorted array

                // Set the median value as the new pixel value
                resultImage.setRGB(x, y, median);
            }
        }
        return resultImage;
    }
}

এই কোডে, 3x3 পিক্সেল ব্লক নেওয়া হয়েছে এবং সেগুলির মধ্যম মান (median) নির্ধারণ করা হয়েছে, যাতে গোলমাল হ্রাস পায়।


২. গাউসিয়ান ব্লার (Gaussian Blur)

গাউসিয়ান ব্লার একটি কমন ব্লারিং ফিল্টার যা গাউসিয়ান বন্টন (Gaussian distribution) ব্যবহার করে। এটি ছবির মোলায়েমতা বাড়ানোর জন্য ব্যবহৃত হয় এবং ছবির প্রান্ত বা শার্পনেস কমানোর জন্য কার্যকরী। গাউসিয়ান ব্লারের প্রধান সুবিধা হল এটি পিক্সেলের পার্শ্ববর্তী মানগুলি গাণিতিকভাবে গড়ের তুলনায় বেশি গুরুত্ব দেয়, ফলে এটি মসৃণ ব্লার সৃষ্টি করে।

উদাহরণ: গাউসিয়ান ব্লার

import java.awt.image.BufferedImage;

public class GaussianBlur {
    public static BufferedImage applyGaussianBlur(BufferedImage image) {
        int width = image.getWidth();
        int height = image.getHeight();
        BufferedImage blurredImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

        // Gaussian kernel
        float[][] kernel = {
            {1/16f, 2/16f, 1/16f},
            {2/16f, 4/16f, 2/16f},
            {1/16f, 2/16f, 1/16f}
        };

        for (int i = 1; i < width - 1; i++) {
            for (int j = 1; j < height - 1; j++) {
                float sumRed = 0, sumGreen = 0, sumBlue = 0;

                // Apply the Gaussian kernel to the surrounding pixels
                for (int k = -1; k <= 1; k++) {
                    for (int l = -1; l <= 1; l++) {
                        int pixel = image.getRGB(i + k, j + l);
                        int red = (pixel >> 16) & 0xff;
                        int green = (pixel >> 8) & 0xff;
                        int blue = pixel & 0xff;

                        sumRed += red * kernel[k + 1][l + 1];
                        sumGreen += green * kernel[k + 1][l + 1];
                        sumBlue += blue * kernel[k + 1][l + 1];
                    }
                }

                // Normalize and set the pixel values
                int newRed = Math.min(255, Math.max(0, (int)sumRed));
                int newGreen = Math.min(255, Math.max(0, (int)sumGreen));
                int newBlue = Math.min(255, Math.max(0, (int)sumBlue));

                int newColor = (newRed << 16) | (newGreen << 8) | newBlue;
                blurredImage.setRGB(i, j, newColor);
            }
        }

        return blurredImage;
    }
}

এখানে, গাউসিয়ান বন্টন (Gaussian distribution) কনভলিউশন কোর ব্যবহার করে ফিল্টার প্রয়োগ করা হয়েছে যা ছবির প্রতিটি পিক্সেলকে মোলায়েম করে।


৩. ল্যাপ্লেসিয়ান ফিল্টার (Laplacian Filter)

ল্যাপ্লেসিয়ান ফিল্টার হল একটি এজ ডিটেকশন ফিল্টার যা ছবির মধ্যে প্রান্ত বা পরিবর্তনের অংশগুলি শনাক্ত করতে ব্যবহৃত হয়। এটি একটি দ্বিতীয়-অর্ডার ডেরিভেটিভ ফিল্টার যা ছবির গা dark ় অঞ্চল এবং উজ্জ্বল অঞ্চলগুলির মধ্যে তীব্র পরিবর্তন শনাক্ত করতে সহায়ক।

উদাহরণ: ল্যাপ্লেসিয়ান ফিল্টার

import java.awt.image.BufferedImage;

public class LaplacianFilter {
    public static BufferedImage applyLaplacianFilter(BufferedImage image) {
        int width = image.getWidth();
        int height = image.getHeight();
        BufferedImage resultImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

        // Laplacian kernel
        int[][] kernel = {
            {0, -1, 0},
            {-1, 4, -1},
            {0, -1, 0}
        };

        for (int i = 1; i < width - 1; i++) {
            for (int j = 1; j < height - 1; j++) {
                int sumRed = 0, sumGreen = 0, sumBlue = 0;

                // Apply the Laplacian kernel to the surrounding pixels
                for (int k = -1; k <= 1; k++) {
                    for (int l = -1; l <= 1; l++) {
                        int pixel = image.getRGB(i + k, j + l);
                        int red = (pixel >> 16) & 0xff;
                        int green = (pixel >> 8) & 0xff;
                        int blue = pixel & 0xff;

                        sumRed += red * kernel[k + 1][l + 1];
                        sumGreen += green * kernel[k + 1][l + 1];
                        sumBlue += blue * kernel[k + 1][l + 1];
                    }
                }

                // Normalize and set the pixel values
                int newRed = Math.min(255, Math.max(0, sumRed));
                int newGreen = Math.min(255, Math.max(0, sumGreen));
                int newBlue = Math.min(255, Math.max(0, sumBlue));

                int newColor = (newRed << 16) | (newGreen << 8) | newBlue;
                resultImage.setRGB(i, j, newColor);
            }
        }

        return resultImage;
    }
}

এখানে, ল্যাপ্লেসিয়ান ফিল্টার ব্যবহার করা হয়েছে, যা ছবি থেকে প্রান্ত (edge) শনাক্ত করার জন্য ব্যবহৃত হয়। এটি ছবির গা dark ় এবং উজ্জ্বল অংশের মধ্যে পরিবর্তন শনাক্ত করে।


সারসংক্ষেপ

  • মিডিয়ান ফিল্টার: গোলমাল (noise) কমানোর জন্য ব্যবহার করা হয়, বিশেষত স্পাইক নয়েজে।
  • গাউসিয়ান ব্লার: মোলায়েমতা বৃদ্ধি করার জন্য ব্যবহৃত হয়, যা ছবির প্রান্ত কমিয়ে দেয়।
  • ল্যাপ্লেসিয়ান ফিল্টার: এজ ডিটেকশন এর জন্য ব্যবহৃত হয়, যা ছবির প্রান্ত বা পরিবর্তনের স্থান চিহ্ন

িত করে।

এই ফিল্টারগুলির মাধ্যমে, আপনি ইমেজের বিভিন্ন বৈশিষ্ট্য যেমন গোলমাল দূরীকরণ, প্রান্ত শনাক্তকরণ, এবং মোলায়েমতা বৃদ্ধি করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...