Sobel এবং Canny এজ ডিটেকশন
এজ ডিটেকশন হলো ইমেজ প্রসেসিংয়ের একটি মৌলিক কৌশল, যা ছবি থেকে অবজেক্টের প্রান্ত বা সীমা শনাক্ত করতে ব্যবহৃত হয়। Sobel এবং Canny এজ ডিটেকশন হলো জনপ্রিয় এবং কার্যকর টেকনিক, যা বিভিন্ন ক্ষেত্রে যেমন কম্পিউটার ভিশন, অবজেক্ট সেগমেন্টেশন, এবং অবজেক্ট ট্র্যাকিংয়ে ব্যবহৃত হয়।
Sobel এজ ডিটেকশন
Sobel এজ ডিটেকশন একটি সাধারণ এবং দ্রুত এজ ডিটেকশন টেকনিক, যা ইমেজের গ্রেডিয়েন্ট ব্যবহার করে প্রান্ত নির্ণয় করে। এটি সাধারণত দুটি ফিল্টার কোরেল ব্যবহার করে, একটি X-অক্ষ বরাবর এবং একটি Y-অক্ষ বরাবর।
প্রক্রিয়া
- 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}
\]
- X-অক্ষের জন্য Sobel কোরেল:
- গ্রেডিয়েন্ট ম্যাগনিটিউড গণনা: প্রতিটি পিক্সেলের জন্য X এবং Y গ্রেডিয়েন্ট ব্যবহার করে এজের মাত্রা নির্ধারণ করা হয়।
- সংমিশ্রণ: দুটি গ্রেডিয়েন্টের ফলাফলের মাধ্যমে প্রান্তের শক্তি নির্ধারণ করা হয়।
উদাহরণ
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 এর চেয়ে বেশি কার্যকর এবং সঠিক।
প্রক্রিয়া
- স্মুথিং: প্রথমে Gaussian ফিল্টার ব্যবহার করে ইমেজের শোর অপসারণ করা হয়।
- গ্রেডিয়েন্ট নির্ধারণ: Sobel ফিল্টারের মতো X এবং Y দিকের গ্রেডিয়েন্ট নির্ধারণ করে।
- নন-ম্যাক্সিমাম সাপ্রেশন: এই ধাপে শুধুমাত্র সর্বোচ্চ গ্রেডিয়েন্ট মান রক্ষা করে প্রান্তগুলোকে আরও সুনির্দিষ্ট করা হয়।
- ডাবল থ্রেশোল্ডিং: দুটি থ্রেশোল্ড মান ব্যবহার করে প্রান্তগুলোকে শক্তিশালী এবং দুর্বল এজে ভাগ করা হয়।
- এজ ট্র্যাকিং: দুর্বল এজগুলোকে শক্তিশালী এজের সাথে সংযুক্ত করে একটি প্রান্তলেখ তৈরি করা হয়।
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 আরও সঠিক এবং পরিষ্কার প্রান্ত নির্ধারণ করতে সহায়ক। বিভিন্ন ক্ষেত্রে তাদের উপযোগিতা বিবেচনা করে উপযুক্ত এজ ডিটেকশন টেকনিক নির্বাচন করা হয়।