Sobel এবং Canny এজ ডিটেকশন

এজ ডিটেকশন এবং কনট্যুর ফাইন্ডিং (Edge Detection and Contour Finding) - জাভা দিয়ে ডিজিটাল ইমেজ প্রসেসিং (Digital Image Processing using Java) - Computer Science

257

Sobel এবং Canny এজ ডিটেকশন

এজ ডিটেকশন হলো ইমেজ প্রসেসিংয়ের একটি মৌলিক কৌশল, যা ছবি থেকে অবজেক্টের প্রান্ত বা সীমা শনাক্ত করতে ব্যবহৃত হয়। Sobel এবং Canny এজ ডিটেকশন হলো জনপ্রিয় এবং কার্যকর টেকনিক, যা বিভিন্ন ক্ষেত্রে যেমন কম্পিউটার ভিশন, অবজেক্ট সেগমেন্টেশন, এবং অবজেক্ট ট্র্যাকিংয়ে ব্যবহৃত হয়।


Sobel এজ ডিটেকশন

Sobel এজ ডিটেকশন একটি সাধারণ এবং দ্রুত এজ ডিটেকশন টেকনিক, যা ইমেজের গ্রেডিয়েন্ট ব্যবহার করে প্রান্ত নির্ণয় করে। এটি সাধারণত দুটি ফিল্টার কোরেল ব্যবহার করে, একটি X-অক্ষ বরাবর এবং একটি Y-অক্ষ বরাবর।

প্রক্রিয়া

  1. Sobel কোরেল: X এবং Y দিকের জন্য পৃথক কোরেল ব্যবহার করে।
    • X-অক্ষের জন্য Sobel কোরেল:
      \[
      \begin{bmatrix}
      -1 & 0 & +1 \
      -2 & 0 & +2 \
      -1 & 0 & +1
      \end{bmatrix}
      \]
    • Y-অক্ষের জন্য Sobel কোরেল:
      \[
      \begin{bmatrix}
      +1 & +2 & +1 \
      0 & 0 & 0 \
      -1 & -2 & -1
      \end{bmatrix}
      \]
  2. গ্রেডিয়েন্ট ম্যাগনিটিউড গণনা: প্রতিটি পিক্সেলের জন্য X এবং Y গ্রেডিয়েন্ট ব্যবহার করে এজের মাত্রা নির্ধারণ করা হয়।
  3. সংমিশ্রণ: দুটি গ্রেডিয়েন্টের ফলাফলের মাধ্যমে প্রান্তের শক্তি নির্ধারণ করা হয়।

উদাহরণ

import java.awt.image.BufferedImage;
import java.awt.Color;

public class SobelEdgeDetection {
    public static BufferedImage applySobelFilter(BufferedImage image) {
        int[][] kernelX = {
            {-1, 0, 1},
            {-2, 0, 2},
            {-1, 0, 1}
        };
        int[][] kernelY = {
            {1, 2, 1},
            {0, 0, 0},
            {-1, -2, -1}
        };

        int width = image.getWidth();
        int height = image.getHeight();
        BufferedImage result = new BufferedImage(width, height, image.getType());

        for (int x = 1; x < width - 1; x++) {
            for (int y = 1; y < height - 1; y++) {
                int sumX = 0, sumY = 0;

                for (int i = -1; i <= 1; i++) {
                    for (int j = -1; j <= 1; j++) {
                        int gray = new Color(image.getRGB(x + i, y + j)).getRed();
                        sumX += kernelX[i + 1][j + 1] * gray;
                        sumY += kernelY[i + 1][j + 1] * gray;
                    }
                }

                int edgeValue = Math.min(255, Math.max(0, (int) Math.sqrt(sumX * sumX + sumY * sumY)));
                Color edgeColor = new Color(edgeValue, edgeValue, edgeValue);
                result.setRGB(x, y, edgeColor.getRGB());
            }
        }
        return result;
    }
}

Canny এজ ডিটেকশন

Canny এজ ডিটেকশন একটি উন্নত এবং কার্যকর এজ ডিটেকশন পদ্ধতি যা প্রান্ত সনাক্ত করার জন্য বহুমুখী ধাপ অনুসরণ করে। এটি Sobel এর চেয়ে বেশি কার্যকর এবং সঠিক।

প্রক্রিয়া

  1. স্মুথিং: প্রথমে Gaussian ফিল্টার ব্যবহার করে ইমেজের শোর অপসারণ করা হয়।
  2. গ্রেডিয়েন্ট নির্ধারণ: Sobel ফিল্টারের মতো X এবং Y দিকের গ্রেডিয়েন্ট নির্ধারণ করে।
  3. নন-ম্যাক্সিমাম সাপ্রেশন: এই ধাপে শুধুমাত্র সর্বোচ্চ গ্রেডিয়েন্ট মান রক্ষা করে প্রান্তগুলোকে আরও সুনির্দিষ্ট করা হয়।
  4. ডাবল থ্রেশোল্ডিং: দুটি থ্রেশোল্ড মান ব্যবহার করে প্রান্তগুলোকে শক্তিশালী এবং দুর্বল এজে ভাগ করা হয়।
  5. এজ ট্র্যাকিং: দুর্বল এজগুলোকে শক্তিশালী এজের সাথে সংযুক্ত করে একটি প্রান্তলেখ তৈরি করা হয়।

Canny এজ ডিটেকশন পদ্ধতির সুবিধা

  • নির্ভুল প্রান্ত: প্রান্ত সনাক্তকরণ আরও সঠিক এবং সুস্পষ্ট।
  • শোর কমানো: Gaussian ফিল্টার ব্যবহার করে ইমেজের শোর কমিয়ে প্রান্তগুলোকে আরও স্পষ্ট করে।
  • ডাবল থ্রেশোল্ডিং: দুর্বল এবং শক্তিশালী প্রান্ত পৃথক করে সঠিক প্রান্ত সনাক্ত করা।

দ্রষ্টব্য: জাভাতে Canny এজ ডিটেকশনের জন্য OpenCV লাইব্রেরি ব্যবহার করা সবচেয়ে সহজ এবং কার্যকর। OpenCV জাভাতে "Canny" ফাংশন সরবরাহ করে, যা সহজেই ব্যবহার করা যায়।

উদাহরণ (OpenCV ব্যবহার করে)

import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class CannyEdgeDetection {
    static {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    }

    public static void main(String[] args) {
        // ইমেজ লোড করা
        Mat src = Imgcodecs.imread("path/to/image.jpg", Imgcodecs.IMREAD_GRAYSCALE);
        
        // স্মুথিং করা
        Mat blurred = new Mat();
        Imgproc.GaussianBlur(src, blurred, new Size(3, 3), 0);
        
        // Canny এজ ডিটেকশন করা
        Mat edges = new Mat();
        Imgproc.Canny(blurred, edges, 100, 200);

        // এজ ইমেজ সংরক্ষণ করা
        Imgcodecs.imwrite("path/to/save/canny_edges.jpg", edges);
    }
}

Sobel এবং Canny এজ ডিটেকশনের তুলনা

বৈশিষ্ট্যSobel এজ ডিটেকশনCanny এজ ডিটেকশন
গতিদ্রুত এবং সহজঅপেক্ষাকৃত ধীর কিন্তু নির্ভুল
শোর অপসারণসরাসরি শোর অপসারণ করে নাGaussian ফিল্টার ব্যবহার করে শোর অপসারণ
এজ নির্ধারণসাধারণ এবং কম নির্ভুলআরও নির্ভুল এবং নির্দিষ্ট
ডাবল থ্রেশোল্ডিংনেইরয়েছে
ব্যবহারসহজ এবং দ্রুত প্রক্রিয়ার জন্যসুনির্দিষ্ট এজ ডিটেকশনের জন্য

সারসংক্ষেপ

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

Content added By
Promotion

Are you sure to start over?

Loading...