Image Segmentation হল একটি প্রক্রিয়া যার মাধ্যমে একটি ইমেজকে বিভিন্ন অর্থপূর্ণ অংশে (segments) ভাগ করা হয়। প্রতিটি অংশ বা সেগমেন্ট সাধারণত একটি নির্দিষ্ট বৈশিষ্ট্য বা শ্রেণী ধারণ করে, যেমন বস্তুর আকৃতি, রঙ, টেক্সচার ইত্যাদি। Image segmentation এর অনেক ব্যবহার রয়েছে, যেমন চিকিৎসা ইমেজিং, রোড সিগনাল সনাক্তকরণ, স্যাটেলাইট ইমেজ বিশ্লেষণ, ইত্যাদি।
এখানে কিছু সাধারণ Image Segmentation Techniques বর্ণনা করা হল:
1. Thresholding
Thresholding একটি মৌলিক এবং জনপ্রিয় Image Segmentation পদ্ধতি, যেখানে পিক্সেলের মানের উপর ভিত্তি করে একটি ইমেজকে দুটি অংশে বিভক্ত করা হয়। এটি সহজ এবং দ্রুত হলেও, শুধুমাত্র কিছু সহজ কেসের জন্য কার্যকরী হতে পারে।
- Global Thresholding: একটি নির্দিষ্ট মানের উপরে বা নিচে থাকা পিক্সেলগুলি দুটি শ্রেণীতে ভাগ করা হয় (যেমন foreground এবং background)।
- Adaptive Thresholding: এই পদ্ধতিতে পিক্সেলগুলির মানের পরিবর্তনশীলতা বা স্থানিক বৈশিষ্ট্য বিবেচনা করা হয়।
উদাহরণ:
import cv2
import numpy as np
# Load image
img = cv2.imread('image.jpg', 0)
# Apply thresholding
_, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
# Show the image
cv2.imshow('Thresholding', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
2. Edge Detection
Edge detection ইমেজের সীমানা বা আকৃতির স্পষ্ট পরিচয় প্রদান করে, যা সেগমেন্টেশন প্রক্রিয়াকে সহজ করে তোলে। এটি সাধারণত Canny, Sobel, বা Laplacian অপারেটর ব্যবহার করে করা হয়।
- Canny Edge Detection: এটি এক ধরনের মাল্টি-স্টেপ প্রক্রিয়া যা ইমেজের সীমানা সনাক্ত করে এবং একটি সিগনাল-টু-নয়েজ রেশিও (SNR) রক্ষা করে।
উদাহরণ:
import cv2
# Load image
img = cv2.imread('image.jpg', 0)
# Apply Canny edge detection
edges = cv2.Canny(img, 100, 200)
# Show the image
cv2.imshow('Canny Edge Detection', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
3. Watershed Algorithm
Watershed Algorithm একটি জনপ্রিয় Image Segmentation টেকনিক যা এক ধরনের গ্রাফিক্যাল পদ্ধতি ব্যবহার করে। এটি ইমেজের প্রতিটি পিক্সেলকে একটি নির্দিষ্ট অঞ্চল হিসেবে ভেবে, পানির মতো প্রবাহিত হয়ে গ্রুপিং করে সেগমেন্ট তৈরি করে।
- এটি একটি region-based segmentation পদ্ধতি যা ইমেজের আকৃতি এবং গঠন অনুযায়ী বিভক্ত করে।
- Watershed Algorithm সাধারণত বক্স, সার্কেল বা অন্যান্য শেপ সেগমেন্টেশন প্রক্রিয়ায় ব্যবহৃত হয়।
উদাহরণ:
import cv2
import numpy as np
# Load image
img = cv2.imread('image.jpg')
# Convert to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Apply thresholding
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# Apply watershed algorithm
ret, markers = cv2.connectedComponents(thresh)
markers = markers + 1
markers[thresh == 0] = 0
cv2.watershed(img, markers)
img[markers == -1] = [0, 0, 255]
# Show the result
cv2.imshow('Watershed Segmentation', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
4. Region Growing
Region Growing একটি অন্যান্য Region-based segmentation পদ্ধতি, যেখানে একটি প্রাথমিক পিক্সেল থেকে শুরু করে প্রতিবেশী পিক্সেলগুলিকে যুক্ত করা হয় যতক্ষণ না কোনো নতুন সেগমেন্ট তৈরি না হয়।
- Seed-based Region Growing: প্রথমে একটি সীড পিক্সেল নির্বাচন করা হয় এবং তারপর প্রতিটি প্রতিবেশী পিক্সেল সেটের সাথে সম্পর্কযুক্ত পিক্সেলগুলিকে যুক্ত করা হয়।
5. K-means Clustering
K-means clustering একটি অপ্রত্যক্ষভাবে supervised segmentation পদ্ধতি যেখানে ক্লাস্টারের সংখ্যা (K) আগে থেকে নির্ধারণ করতে হয়। এটি একটি শক্তিশালী ক্লাস্টারিং পদ্ধতি যা ইমেজের পিক্সেলগুলোকে সমান বৈশিষ্ট্যসমূহের ভিত্তিতে ক্লাস্টারে ভাগ করে।
- K-means clustering একটি নির্দিষ্ট সংখ্যক গোষ্ঠী বা ক্লাস্টার তৈরি করে এবং প্রতিটি পিক্সেল একটি নির্দিষ্ট ক্লাস্টারে প্রাপ্ত বৈশিষ্ট্য অনুযায়ী শ্রেণীবদ্ধ হয়।
উদাহরণ:
import cv2
import numpy as np
# Load image
img = cv2.imread('image.jpg')
# Reshape image to 2D array
Z = img.reshape((-1, 3))
# Convert to float
Z = np.float32(Z)
# Define criteria and apply kmeans
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.2)
K = 2 # Number of clusters
_, labels, centers = cv2.kmeans(Z, K, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
# Convert back to 8 bit values
centers = np.uint8(centers)
segmented_img = centers[labels.flatten()]
# Reshape back to the original image
segmented_img = segmented_img.reshape(img.shape)
# Show the result
cv2.imshow('K-means Segmentation', segmented_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
6. Convolutional Neural Networks (CNNs) for Image Segmentation
CNNs প্রথাগত ইমেজ সেগমেন্টেশন টেকনিকগুলির তুলনায় আরও কার্যকরী এবং আধুনিক পদ্ধতি হিসেবে ব্যবহৃত হয়। মডেলগুলি পিক্সেল-লেভেল সেগমেন্টেশন করতে পারে এবং এই প্রক্রিয়াটি semantic segmentation এবং instance segmentation এর জন্য খুবই জনপ্রিয়।
- Fully Convolutional Networks (FCNs): FCNs হল CNN এর একটি বিশেষ রূপ যা ইমেজের প্রতিটি পিক্সেলে ক্লাস প্রেডিকশন করতে সক্ষম।
- U-Net: এটি একটি অত্যন্ত জনপ্রিয় মডেল যা মেডিকেল ইমেজ সেগমেন্টেশনে ব্যবহৃত হয়।
- Mask R-CNN: Mask R-CNN একটি CNN এর উপরে ইনস্ট্যান্স সেগমেন্টেশন করতে সক্ষম এবং একটি অবজেক্ট সনাক্তকরণ এবং সেগমেন্টেশন মডেল।
উদাহরণ (U-Net):
from tensorflow.keras import layers, models
def unet(input_size=(256, 256, 3)):
inputs = layers.Input(input_size)
# Encoding path (Contracting path)
c1 = layers.Conv2D(64, (3, 3), activation='relu', padding='same')(inputs)
c1 = layers.Conv2D(64, (3, 3), activation='relu', padding='same')(c1)
# Decoding path (Expanding path)
c2 = layers.Conv2D(64, (3, 3), activation='relu', padding='same')(c1)
# Output layer
outputs = layers.Conv2D(1, (1, 1), activation='sigmoid')(c2)
model = models.Model(inputs=[inputs], outputs=[outputs])
return model
# Create U-Net model
model = unet()
model.summary()
7. DeepLabV3+
DeepLabV3+ হল একটি অত্যাধুনিক semantic segmentation মডেল যা dilated convolutions এবং atrous spatial pyramid pooling (ASPP) ব্যবহার করে উচ্চ মানের সেগমেন্টেশন প্রদান করে।
8. Summary of Image Segmentation Techniques:
| Technique | Description | Use Case |
|---|---|---|
| Thresholding | Simple method based on pixel intensity values to segment an image. | Binary segmentation (foreground vs background). |
| Edge Detection | Identifying boundaries of objects in an image. | Object detection and segmentation. |
| Watershed Algorithm | Region-based segmentation, where pixels are grouped into regions. | Complex objects or topological segmentation. |
| Region Growing | Based on seed regions and growing the segment by adding similar pixels. | Medical imaging and region-based segmentation. |
| K-means Clustering | Pixels grouped into clusters based on color or intensity similarity. | Image compression, color segmentation. |
| CNNs (U-Net, FCN, Mask R-CNN) | Deep learning models for pixel-level segmentation. | Medical imaging, object detection, semantic segmentation. |
Conclusion:
Image segmentation একটি গুরুত্বপূর্ণ কাজ যা ভিন্ন ভিন্ন ডোমেইনে ব্যবহৃত হয়। প্রচলিত প্রথাগত পদ্ধতিগুলির পাশাপাশি, Deep Learning মডেল যেমন U-Net, Mask R-CNN, এবং DeepLabV3+ অত্যন্ত কার্যকরী এবং আধুনিক পদ্ধতি হিসেবে ব্যবহৃত হচ্ছে। এগুলি চিত্র বিশ্লেষণ এবং পিক্সেল লেভেল সেগমেন্টেশনের জন্য ব্যবহৃত হয় এবং বিভিন্ন ক্ষেত্রে অসাধারণ ফলাফল প্রদান করে।
Read more