মরফোলজিকাল অপারেশন প্রয়োগ করে ইমেজ এনহ্যান্সমেন্ট (Image Enhancement Using Morphological Operations)
মরফোলজিকাল অপারেশন হল ইমেজ প্রসেসিংয়ের একটি শক্তিশালী কৌশল যা চিত্রের গঠন এবং কাঠামো বিশ্লেষণ করে বিভিন্ন পিক্সেল প্রক্রিয়া সম্পাদন করে। এটি মূলত বাইনারি ইমেজ বা গ্রেস্কেল ইমেজের উপর কার্যকরী হয়, যেখানে চিত্রের গঠন সম্পর্কিত তথ্য বের করার জন্য পিক্সেলের মাঝে পরিবর্তন করা হয়।
মরফোলজিকাল অপারেশনে সাধারণত ডাইলেশন (Dilation), ইরোশন (Erosion), ওপেনিং (Opening), ক্লোজিং (Closing), থিনিং (Thinning) এবং থিকেনিং (Thickening) ফিল্টার ব্যবহার করা হয়।
১. ডাইলেশন (Dilation)
ডাইলেশন একটি অপারেশন যা ইমেজের পিক্সেলকে আরও বিস্তৃত করে। এটি ছবির গঠনকে বৃদ্ধি করতে এবং ছিদ্র বা ফাঁকা স্থান পূর্ণ করতে সাহায্য করে।
উদাহরণ: ডাইলেশন
import java.awt.image.BufferedImage;
public class Dilation {
public static BufferedImage applyDilation(BufferedImage image) {
int width = image.getWidth();
int height = image.getHeight();
BufferedImage dilatedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for (int x = 1; x < width - 1; x++) {
for (int y = 1; y < height - 1; y++) {
boolean dilated = false;
for (int dx = -1; dx <= 1; dx++) {
for (int dy = -1; dy <= 1; dy++) {
if ((image.getRGB(x + dx, y + dy) & 0xFFFFFF) == 0xFFFFFF) {
dilated = true;
}
}
}
if (dilated) {
dilatedImage.setRGB(x, y, 0xFFFFFF); // white (255, 255, 255)
} else {
dilatedImage.setRGB(x, y, 0x000000); // black (0, 0, 0)
}
}
}
return dilatedImage;
}
}এখানে, ডাইলেশন অপারেশন ফিল্টারটি পিক্সেল গঠন বাড়ায় এবং আশেপাশের ব্ল্যাক পিক্সেলগুলিকে সাদা (white) করে দেয়, যা ছবি শোর প্রভাব কমাতে সহায়ক হতে পারে।
২. ইরোশন (Erosion)
ইরোশন একটি অপারেশন যা ইমেজের পিক্সেলগুলোকে সংকুচিত করে এবং এর আকারকে ছোট করে, অর্থাৎ ছবির গঠন হ্রাস পায়। এটি একটি বাইনারি ইমেজ থেকে সাদা অংশ ছোট করতে এবং ব্যাকগ্রাউন্ড বা পটভূমির সঙ্গে মিশ্রণ করতে ব্যবহৃত হয়।
উদাহরণ: ইরোশন
import java.awt.image.BufferedImage;
public class Erosion {
public static BufferedImage applyErosion(BufferedImage image) {
int width = image.getWidth();
int height = image.getHeight();
BufferedImage erodedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for (int x = 1; x < width - 1; x++) {
for (int y = 1; y < height - 1; y++) {
boolean eroded = true;
for (int dx = -1; dx <= 1; dx++) {
for (int dy = -1; dy <= 1; dy++) {
if ((image.getRGB(x + dx, y + dy) & 0xFFFFFF) != 0xFFFFFF) {
eroded = false;
}
}
}
if (eroded) {
erodedImage.setRGB(x, y, 0xFFFFFF); // white (255, 255, 255)
} else {
erodedImage.setRGB(x, y, 0x000000); // black (0, 0, 0)
}
}
}
return erodedImage;
}
}এখানে ইরোশন অপারেশন প্রয়োগ করা হয়েছে, যা ইমেজের সাদা পিক্সেলগুলির আকার ছোট করে দেয় এবং ব্ল্যাক পিক্সেলগুলিকে আরও বিস্তৃত করে।
৩. ওপেনিং (Opening)
ওপেনিং অপারেশন হল প্রথমে ইরোশন প্রয়োগ করা এবং তারপর ডাইলেশন প্রয়োগ করা। এটি সাধারণত গোলমাল সরানোর জন্য ব্যবহৃত হয়, যেমন ছোট ছোট অবাঞ্ছিত পিক্সেল বা ব্ল্যাক ডটস সরানোর জন্য।
উদাহরণ: ওপেনিং
import java.awt.image.BufferedImage;
public class Opening {
public static BufferedImage applyOpening(BufferedImage image) {
// Apply erosion first
BufferedImage erodedImage = applyErosion(image);
// Then apply dilation on the eroded image
return applyDilation(erodedImage);
}
public static BufferedImage applyErosion(BufferedImage image) {
// Erosion operation logic here...
// (use the code from the previous Erosion example)
return image;
}
public static BufferedImage applyDilation(BufferedImage image) {
// Dilation operation logic here...
// (use the code from the previous Dilation example)
return image;
}
}এখানে, ওপেনিং অপারেশন প্রথমে ইরোশন এবং পরে ডাইলেশন অপারেশন প্রয়োগ করে ছবি থেকে ছোট ছোট গোলমাল এবং অবাঞ্ছিত পিক্সেল সরিয়ে ফেলে।
৪. ক্লোজিং (Closing)
ক্লোজিং অপারেশন হল প্রথমে ডাইলেশন প্রয়োগ করা এবং তারপর ইরোশন প্রয়োগ করা। এটি ছোট গর্ত এবং ফাঁকা স্থান পূর্ণ করার জন্য ব্যবহৃত হয়, এবং এটি ইমেজের কাঠামো পুনর্গঠনে সহায়ক।
উদাহরণ: ক্লোজিং
import java.awt.image.BufferedImage;
public class Closing {
public static BufferedImage applyClosing(BufferedImage image) {
// Apply dilation first
BufferedImage dilatedImage = applyDilation(image);
// Then apply erosion on the dilated image
return applyErosion(dilatedImage);
}
public static BufferedImage applyErosion(BufferedImage image) {
// Erosion operation logic here...
// (use the code from the previous Erosion example)
return image;
}
public static BufferedImage applyDilation(BufferedImage image) {
// Dilation operation logic here...
// (use the code from the previous Dilation example)
return image;
}
}এখানে, ক্লোজিং অপারেশন প্রথমে ডাইলেশন এবং পরে ইরোশন অপারেশন প্রয়োগ করে ইমেজের গর্ত এবং ফাঁকা স্থান পূর্ণ করে।
৫. থিনিং (Thinning) এবং থিকেনিং (Thickening)
- থিনিং অপারেশন ছবির সাদা অংশকে আরো সংকুচিত করে, বিশেষত সীমানা পিক্সেলগুলো ছোট করে দেয়, যা ছবির কাঠামোকে আরো সুসংহত করে।
- থিকেনিং অপারেশন ছবির সাদা অংশের আকার বৃদ্ধি করে, বিশেষত ছবির সীমানা বা লাইনগুলো আরও স্পষ্ট করে।
এই অপারেশনগুলি সাধারণত বাইনরি ইমেজে ব্যবহৃত হয় এবং ছবি বিশ্লেষণ এবং প্যাটার্ন রিকগনিশন কাজে ব্যবহৃত হয়।
সারসংক্ষেপ
মরফোলজিকাল অপারেশন একটি শক্তিশালী এবং বহুল ব্যবহৃত কৌশল ডিজিটাল ইমেজ প্রসেসিংয়ে, যা ছবির গঠন, কাঠামো এবং শেপ বিশ্লেষণ করে। অপারেশনগুলির মধ্যে ডাইলেশন, ইরোশন, ওপেনিং, ক্লোজিং, থিনিং এবং থিকেনিং অন্তর্ভুক্ত রয়েছে, যা গোলমাল কমানো, ফাঁকা স্থান পূর্ণ করা, এবং ছবির কাঠামো উন্নত করা করতে ব্যবহৃত হয়। এই অপারেশনগুলি বিশেষভাবে বাইনরি ইমেজ বা গ্রেস্কেল ইমেজ-এ কার্যকরী।
Read more