ইমেজ এনহ্যান্সমেন্ট (Image Enhancement Techniques)
ইমেজ এনহ্যান্সমেন্ট হলো একটি ইমেজ প্রসেসিং টেকনিক যার মাধ্যমে ছবির গুণগত মান বৃদ্ধি করা হয়, যাতে এটি দেখতে আরও স্পষ্ট, ত্রুটিমুক্ত এবং বিশ্লেষণের জন্য উপযোগী হয়। ইমেজ এনহ্যান্সমেন্ট বিভিন্ন ক্ষেত্রে যেমন চিকিৎসা, স্যাটেলাইট ইমেজিং, ফটোগ্রাফি এবং সিকিউরিটি ক্যামেরার ফুটেজে ব্যবহৃত হয়। নিচে কিছু সাধারণ ইমেজ এনহ্যান্সমেন্ট টেকনিকের আলোচনা করা হলো।
সাধারণ ইমেজ এনহ্যান্সমেন্ট টেকনিকস
১. কনট্রাস্ট স্ট্রেচিং (Contrast Stretching)
- বর্ণনা: কনট্রাস্ট স্ট্রেচিং হলো ইমেজের অন্ধকার এবং উজ্জ্বল অংশগুলির মধ্যে পার্থক্য বাড়ানোর জন্য ব্যবহৃত একটি টেকনিক।
- প্রক্রিয়া: একটি নির্দিষ্ট রেঞ্জের ইনপুট পিক্সেল ভ্যালুগুলোকে প্রসারিত করে আউটপুটে আরও ভালো কনট্রাস্ট প্রদান করা হয়।
- ব্যবহার: চিকিৎসা ইমেজিং এবং স্যাটেলাইট ইমেজিংয়ে সাধারণত ব্যবহার করা হয়।
import java.awt.image.BufferedImage;
import java.awt.Color;
public class ContrastStretching {
public static BufferedImage applyContrastStretching(BufferedImage image) {
int width = image.getWidth();
int height = image.getHeight();
BufferedImage result = new BufferedImage(width, height, image.getType());
int min = 0, max = 255;
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
Color color = new Color(image.getRGB(x, y));
int red = Math.min(Math.max((color.getRed() - min) * 255 / (max - min), 0), 255);
int green = Math.min(Math.max((color.getGreen() - min) * 255 / (max - min), 0), 255);
int blue = Math.min(Math.max((color.getBlue() - min) * 255 / (max - min), 0), 255);
result.setRGB(x, y, new Color(red, green, blue).getRGB());
}
}
return result;
}
}২. হিস্টোগ্রাম ইকুয়ালাইজেশন (Histogram Equalization)
- বর্ণনা: হিস্টোগ্রাম ইকুয়ালাইজেশন হলো একটি টেকনিক যার মাধ্যমে ইমেজের কনট্রাস্ট উন্নত করা হয়।
- প্রক্রিয়া: ইমেজের প্রতিটি পিক্সেলের ভ্যালু পুনর্বিন্যাস করা হয় যাতে তাদের সংখ্যাগত বন্টন সমান হয়।
- ব্যবহার: চিকিৎসা ইমেজিং, স্যাটেলাইট ইমেজ, এবং লো-কনট্রাস্ট ফটোগ্রাফি।
import java.awt.image.BufferedImage;
public class HistogramEqualization {
public static BufferedImage applyHistogramEqualization(BufferedImage image) {
int width = image.getWidth();
int height = image.getHeight();
BufferedImage result = new BufferedImage(width, height, image.getType());
int[] histogram = new int[256];
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
int gray = new Color(image.getRGB(x, y)).getRed();
histogram[gray]++;
}
}
int total = width * height;
float[] cumulativeDistribution = new float[256];
cumulativeDistribution[0] = (float) histogram[0] / total;
for (int i = 1; i < 256; i++) {
cumulativeDistribution[i] = cumulativeDistribution[i - 1] + (float) histogram[i] / total;
}
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
int gray = new Color(image.getRGB(x, y)).getRed();
int newGray = (int) (cumulativeDistribution[gray] * 255);
Color newColor = new Color(newGray, newGray, newGray);
result.setRGB(x, y, newColor.getRGB());
}
}
return result;
}
}৩. গাউসিয়ান ব্লার (Gaussian Blur)
- বর্ণনা: গাউসিয়ান ব্লার একটি ফিল্টার যা ছবির শোর কমাতে এবং ছবির অপ্রয়োজনীয় ডিটেইল সরাতে ব্যবহৃত হয়।
- প্রক্রিয়া: একটি গাউসিয়ান কোরেল ব্যবহার করে ছবির প্রতিটি পিক্সেলের চারপাশের পিক্সেলগুলোকে গড় করে একটি স্মুথ ইফেক্ট তৈরি করা হয়।
- ব্যবহার: ফটোগ্রাফি এবং সিকিউরিটি ইমেজে শোর কমাতে এবং ইমেজ স্মুথিং করতে ব্যবহৃত হয়।
৪. শার্পেনিং (Sharpening)
- বর্ণনা: শার্পেনিং একটি ইমেজ এনহ্যান্সমেন্ট টেকনিক যা ইমেজের ডিটেইল বা প্রান্তগুলিকে আরও স্পষ্ট করে তোলে।
- প্রক্রিয়া: শার্পেনিং কোরেল ব্যবহার করে এজ ডিটেকশন এবং উচ্চ ফ্রিকোয়েন্সি সংকেতকে বৃদ্ধি করা হয়।
- ব্যবহার: ফটোগ্রাফি এবং স্যাটেলাইট ইমেজিংয়ে প্রয়োজনীয় ডিটেইলস হাইলাইট করতে।
৫. এজ ডিটেকশন (Edge Detection)
- বর্ণনা: এজ ডিটেকশন টেকনিক ইমেজের প্রান্ত বা কনট্যুর শনাক্ত করতে ব্যবহৃত হয়।
- প্রক্রিয়া: সোবেল, প্রেউইট, এবং ক্যানি এজ ডিটেকশন অ্যালগরিদম ব্যবহার করা হয়।
- ব্যবহার: অবজেক্ট ডিটেকশন এবং চিত্র বিশ্লেষণের জন্য ব্যবহৃত হয়।
import java.awt.image.BufferedImage;
import java.awt.Color;
public class EdgeDetection {
public static BufferedImage applySobelEdgeDetection(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;
}
}সারসংক্ষেপ
ইমেজ এনহ্যান্সমেন্টে বিভিন্ন টেকনিকের মাধ্যমে ছবির গুণগত মান উন্নত করা যায়। কনট্রাস্ট স্ট্রেচিং, হিস্টোগ্রাম ইকুয়ালাইজেশন, গাউসিয়ান ব্লার, শার্পেনিং এবং এজ ডিটেকশন হলো কয়েকটি সাধারণ টেকনিক যা বিভিন্ন প্রয়োজনীয়তায় ব্যবহৃত হয়। জাভা ব্যবহার করে এই টেকনিকগুলো বাস্তবায়ন করা যায়, যা ফটোগ্রাফি, চিকিৎসা ইমেজিং এবং কম্পিউটার ভিশন ক্ষেত্রে ইমেজ প্রসেসিংয়ে কার্যকর ভূমিকা পালন করে।
ইমেজ ব্রাইটনেস এবং কনট্রাস্ট অ্যাডজাস্টমেন্ট (Image Brightness and Contrast Adjustment)
ব্রাইটনেস এবং কনট্রাস্ট অ্যাডজাস্টমেন্ট হলো ইমেজ প্রসেসিংয়ের গুরুত্বপূর্ণ দুটি ধাপ যা ইমেজের দৃশ্যমান গুণগত মান বৃদ্ধি করতে সহায়ক। ব্রাইটনেস এবং কনট্রাস্ট পরিবর্তনের মাধ্যমে ছবির উজ্জ্বলতা এবং পার্থক্য উন্নত করা যায়, যা ছবিকে আরও স্পষ্ট ও সুন্দর করে তোলে।
১. ইমেজ ব্রাইটনেস অ্যাডজাস্টমেন্ট
ব্রাইটনেস হলো ছবির উজ্জ্বলতা বৃদ্ধি বা হ্রাস করার প্রক্রিয়া। এটি ছবির প্রতিটি পিক্সেলের মান পরিবর্তন করে, যাতে ছবির সাধারণ উজ্জ্বলতা বাড়ানো বা কমানো যায়।
প্রক্রিয়া
- প্রতিটি পিক্সেলের রঙের মানে একটি নির্দিষ্ট মান যোগ বা বিয়োগ করা হয়।
- নতুন পিক্সেল মান
NewPixelValue = OldPixelValue + BrightnessValueএই সূত্র ব্যবহার করে নির্ধারণ করা হয়। - যদি পিক্সেলের মান নির্ধারিত সীমা (0-255) এর বাইরে চলে যায়, তবে তা সীমার মধ্যে রাখতে হবে।
উদাহরণ (জাভা কোড)
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
public class BrightnessAdjustment {
public static void main(String[] args) {
try {
BufferedImage img = ImageIO.read(new File("path/to/your/image.jpg"));
int brightnessValue = 50; // উজ্জ্বলতা মান
for (int x = 0; x < img.getWidth(); x++) {
for (int y = 0; y < img.getHeight(); y++) {
int rgb = img.getRGB(x, y);
int alpha = (rgb >> 24) & 0xff;
int red = Math.min(255, Math.max(0, ((rgb >> 16) & 0xff) + brightnessValue));
int green = Math.min(255, Math.max(0, ((rgb >> 8) & 0xff) + brightnessValue));
int blue = Math.min(255, Math.max(0, (rgb & 0xff) + brightnessValue));
int newRgb = (alpha << 24) | (red << 16) | (green << 8) | blue;
img.setRGB(x, y, newRgb);
}
}
ImageIO.write(img, "jpg", new File("path/to/your/brightened_image.jpg"));
} catch (Exception e) {
e.printStackTrace();
}
}
}২. ইমেজ কনট্রাস্ট অ্যাডজাস্টমেন্ট
কনট্রাস্ট হলো ছবির উজ্জ্বল এবং অন্ধকার অংশের মধ্যে পার্থক্য বা বৈপরীত্য বাড়ানোর প্রক্রিয়া। কনট্রাস্ট বৃদ্ধির ফলে ছবির উজ্জ্বল অংশ আরও উজ্জ্বল এবং অন্ধকার অংশ আরও গাঢ় হয়।
প্রক্রিয়া
- প্রতিটি পিক্সেলের রঙের মান একটি নির্দিষ্ট গুণক দ্বারা গুণ করা হয়।
- নতুন পিক্সেল মান
NewPixelValue = (OldPixelValue - 128) * ContrastValue + 128সূত্র ব্যবহার করে নির্ধারণ করা হয়। - পিক্সেলের মান সীমার মধ্যে রাখতে
Math.minএবংMath.maxফাংশন ব্যবহার করা হয়।
উদাহরণ (জাভা কোড)
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
public class ContrastAdjustment {
public static void main(String[] args) {
try {
BufferedImage img = ImageIO.read(new File("path/to/your/image.jpg"));
double contrastValue = 1.2; // কনট্রাস্ট মান (1.0 = কোন পরিবর্তন নেই)
for (int x = 0; x < img.getWidth(); x++) {
for (int y = 0; y < img.getHeight(); y++) {
int rgb = img.getRGB(x, y);
int alpha = (rgb >> 24) & 0xff;
int red = (int)(Math.min(255, Math.max(0, ((rgb >> 16) & 0xff) * contrastValue + 128 * (1 - contrastValue))));
int green = (int)(Math.min(255, Math.max(0, ((rgb >> 8) & 0xff) * contrastValue + 128 * (1 - contrastValue))));
int blue = (int)(Math.min(255, Math.max(0, (rgb & 0xff) * contrastValue + 128 * (1 - contrastValue))));
int newRgb = (alpha << 24) | (red << 16) | (green << 8) | blue;
img.setRGB(x, y, newRgb);
}
}
ImageIO.write(img, "jpg", new File("path/to/your/contrasted_image.jpg"));
} catch (Exception e) {
e.printStackTrace();
}
}
}সারসংক্ষেপ
ব্রাইটনেস এবং কনট্রাস্ট অ্যাডজাস্টমেন্ট ইমেজ প্রসেসিংয়ের দুটি মৌলিক কৌশল, যা ছবির উজ্জ্বলতা এবং পার্থক্য উন্নত করতে সহায়ক। ব্রাইটনেস ছবির সামগ্রিক উজ্জ্বলতা বাড়ায় বা কমায়, এবং কনট্রাস্ট ছবির বিভিন্ন অংশে বৈপরীত্য বৃদ্ধি করে ছবির গুণগত মান উন্নয়ন করে। সঠিকভাবে এই দুটি পদ্ধতি ব্যবহার করে ইমেজের দৃশ্যমানতা এবং আকর্ষণ বৃদ্ধি করা যায়, যা বিভিন্ন ক্ষেত্র যেমন ফটোগ্রাফি, ডিজাইন, এবং কম্পিউটার ভিশনে ব্যবহৃত হয়।
হিস্টোগ্রাম ইকুয়ালাইজেশন (Histogram Equalization)
হিস্টোগ্রাম ইকুয়ালাইজেশন হলো একটি ইমেজ প্রসেসিং টেকনিক, যা ইমেজের কনট্রাস্ট বাড়ানোর জন্য ব্যবহৃত হয়। এটি একটি ইমেজের পিক্সেল ভ্যালুগুলোর ডিস্ট্রিবিউশন বা হিস্টোগ্রাম সমানভাবে বিতরণ করতে সহায়ক, যার ফলে ইমেজের উজ্জ্বলতা বা কনট্রাস্ট বাড়ে এবং ডিটেইল আরও স্পষ্ট হয়। এই পদ্ধতিটি বিশেষভাবে গা dark ় বা উজ্জ্বল এলাকায় ভাল কাজ করে।
হিস্টোগ্রাম এবং ইকুয়ালাইজেশন
- হিস্টোগ্রাম: একটি ইমেজের পিক্সেল ভ্যালু (উজ্জ্বলতা বা রঙ) গুলি কীভাবে বিতরণ হয়েছে, তা দেখায়। এটি একটি গ্রাফ যা প্রতিটি উজ্জ্বলতা স্তরের জন্য পিক্সেলের সংখ্যা বা ঘনত্ব প্রতিনিধিত্ব করে।
- ইকুয়ালাইজেশন: এই প্রক্রিয়ার মাধ্যমে একটি ইমেজের পিক্সেল ভ্যালুগুলির বিতরণ এমনভাবে পরিবর্তন করা হয় যে এটি পুরো পরিসরের মধ্যে সমানভাবে বিতরণ হয়, অর্থাৎ কম উজ্জ্বল বা গা dark ় অংশ এবং উজ্জ্বল অংশ উভয়ই আরও ভালভাবে দৃশ্যমান হয়।
হিস্টোগ্রাম ইকুয়ালাইজেশন প্রক্রিয়া
হিস্টোগ্রাম ইকুয়ালাইজেশন সাধারণত নিম্নলিখিত ধাপগুলো অনুসরণ করে:
- ইমেজের হিস্টোগ্রাম হিসাব করা:
- প্রথমে, ইমেজের প্রতিটি পিক্সেল ভ্যালু অনুযায়ী একটি হিস্টোগ্রাম তৈরি করা হয়। এটি চিত্রের উজ্জ্বলতার প্রতিটি স্তরের জন্য পিক্সেলের সংখ্যা বা ঘনত্ব নির্ধারণ করে।
- কিউমুলেটিভ ডিস্ট্রিবিউশন ফাংশন (CDF) গণনা:
- একটি হিস্টোগ্রাম থেকে কিউমুলেটিভ ডিস্ট্রিবিউশন ফাংশন (CDF) তৈরি করা হয়, যা প্রতিটি পিক্সেলের জন্য কিউমুলেটিভ ফ্রিকোয়েন্সি বা ঘনত্ব দেখায়।
- নতুন পিক্সেল ভ্যালু নির্ধারণ:
- CDF এর উপর ভিত্তি করে প্রতিটি পিক্সেলের জন্য একটি নতুন উজ্জ্বলতা স্তর নির্ধারণ করা হয়, যা পুরো পরিসরের মধ্যে সুষমভাবে বিতরণ করা হবে।
- নতুন ইমেজ তৈরি করা:
- নতুন পিক্সেল ভ্যালু অনুযায়ী, একটি নতুন ইমেজ তৈরি করা হয়, যেখানে উজ্জ্বলতা সমানভাবে বিতরণ করা হয়েছে।
জাভাতে হিস্টোগ্রাম ইকুয়ালাইজেশন উদাহরণ
নিচে একটি সাধারণ উদাহরণ দেখানো হয়েছে, যেখানে BufferedImage ব্যবহার করে একটি গ্রেস্কেল ইমেজে হিস্টোগ্রাম ইকুয়ালাইজেশন প্রয়োগ করা হয়েছে।
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class HistogramEqualization {
public static void main(String[] args) {
try {
// ইমেজ লোড করা
File file = new File("path/to/your/image.jpg");
BufferedImage image = ImageIO.read(file);
// ইমেজের হিস্টোগ্রাম গণনা
int width = image.getWidth();
int height = image.getHeight();
int[] histogram = new int[256]; // 256 স্তরের জন্য হিস্টোগ্রাম
// ছবির প্রতিটি পিক্সেলের জন্য হিস্টোগ্রাম তৈরি করা
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
int color = image.getRGB(i, j) & 0xFF; // গ্রেস্কেল ভ্যালু বের করা
histogram[color]++;
}
}
// CDF (Cumulative Distribution Function) গণনা করা
int[] cdf = new int[256];
cdf[0] = histogram[0];
for (int i = 1; i < 256; i++) {
cdf[i] = cdf[i - 1] + histogram[i];
}
// ইমেজের সর্বোচ্চ পিক্সেল মানের জন্য স্কেল ফ্যাক্টর
int minCDF = cdf[0];
int maxCDF = cdf[255];
double scale = 255.0 / (maxCDF - minCDF);
// নতুন ইমেজ তৈরি
BufferedImage newImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
int color = image.getRGB(i, j) & 0xFF; // গ্রেস্কেল ভ্যালু বের করা
int newColor = (int) ((cdf[color] - minCDF) * scale);
newImage.setRGB(i, j, (newColor << 16) | (newColor << 8) | newColor); // নতুন পিক্সেল সেট করা
}
}
// নতুন ইমেজ সংরক্ষণ করা
ImageIO.write(newImage, "jpg", new File("path/to/save/equalized_image.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
}কোডের ব্যাখ্যা:
- ইমেজ লোড:
ImageIO.read()মেথড ব্যবহার করে একটি ছবিকে লোড করা হয়। - হিস্টোগ্রাম তৈরি: চিত্রের প্রতিটি পিক্সেল থেকে উজ্জ্বলতার মান (গ্রেস্কেল ভ্যালু) নিয়ে হিস্টোগ্রাম তৈরি করা হয়।
- CDF তৈরি: হিস্টোগ্রামের কিউমুলেটিভ ফ্রিকোয়েন্সি গণনা করে CDF তৈরি করা হয়।
- নতুন পিক্সেল মান: CDF থেকে নতুন পিক্সেল মান হিসাব করা হয় এবং ইমেজে নতুন মান প্রয়োগ করা হয়।
- নতুন ইমেজ তৈরি এবং সংরক্ষণ: ইমেজটি পরিবর্তন করার পরে নতুন চিত্র সংরক্ষণ করা হয়।
সারসংক্ষেপ
হিস্টোগ্রাম ইকুয়ালাইজেশন একটি গুরুত্বপূর্ণ ইমেজ প্রসেসিং টেকনিক যা ছবির কনট্রাস্ট বাড়ানোর জন্য ব্যবহৃত হয়। এটি মূলত ছবির উজ্জ্বলতা স্তরের সুষম বণ্টন নিশ্চিত করে, যা চিত্রের স্পষ্টতা ও বিস্তারিত দৃশ্যমান করতে সহায়ক। ডিজিটাল ইমেজ প্রসেসিংয়ে এটি একটি অপরিহার্য পদ্ধতি, বিশেষ করে সঠিক এবং কার্যকর চিত্র বিশ্লেষণ এবং উন্নতির জন্য।
ইমেজ ফিল্টারিং: ব্লার, শার্পেন, গাউসিয়ান ফিল্টার
ডিজিটাল ইমেজ প্রসেসিংয়ে, ইমেজ ফিল্টারিং হল একটি প্রক্রিয়া যার মাধ্যমে একটি ইমেজের পিক্সেল ডেটা পরিবর্তন করে চিত্রের বিভিন্ন বৈশিষ্ট্য যেমন শার্পনেস, কনট্রাস্ট বা ব্লার প্রভাব পরিবর্তন করা হয়। ফিল্টারিং সাধারণত কনভলিউশনাল অপারেশন ব্যবহার করে করা হয়, যেখানে একটি কোর বা ফিল্টার ম্যাট্রিক্স একটি পিক্সেলের আশেপাশের পিক্সেলগুলোর উপর কনভলিউশন (গণনা) প্রয়োগ করে।
এখানে আমরা তিনটি সাধারণ ইমেজ ফিল্টারিং কৌশল — ব্লার, শার্পেন, এবং গাউসিয়ান ফিল্টার — এর বিস্তারিত আলোচনা করব এবং জাভাতে কিভাবে এই ফিল্টারগুলি প্রয়োগ করা যায় তা দেখাব।
১. ব্লার (Blur)
ব্লার একটি ফিল্টার প্রক্রিয়া যা ইমেজের তীক্ষ্ণতা কমিয়ে দেয় এবং ছবির মধ্যে একরকম মোলায়েম প্রভাব সৃষ্টি করে। এটি সাধারণত গড় বা মিডিয়ান ফিল্টার ব্যবহার করে করা হয়। ব্লার প্রক্রিয়া একটি ছবির পিক্সেলগুলির উপর গড় মান ব্যবহার করে চিত্রের মসৃণতা বৃদ্ধি করে।
উদাহরণ: গড় ব্লার ফিল্টার
import java.awt.image.BufferedImage;
public class ImageBlur {
public static BufferedImage applyBlur(BufferedImage image) {
int width = image.getWidth();
int height = image.getHeight();
BufferedImage blurredImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
int[] kernel = {-1, -1, -1, -1, 8, -1, -1, -1, -1}; // 3x3 filter
for (int i = 1; i < width - 1; i++) {
for (int j = 1; j < height - 1; j++) {
int sumRed = 0, sumGreen = 0, sumBlue = 0;
for (int k = -1; k <= 1; k++) {
for (int l = -1; l <= 1; l++) {
int pixel = image.getRGB(i + k, j + l);
sumRed += (pixel >> 16) & 0xff;
sumGreen += (pixel >> 8) & 0xff;
sumBlue += pixel & 0xff;
}
}
// Apply the blur effect
int newRed = Math.min(255, Math.max(0, sumRed / 9));
int newGreen = Math.min(255, Math.max(0, sumGreen / 9));
int newBlue = Math.min(255, Math.max(0, sumBlue / 9));
int newColor = (newRed << 16) | (newGreen << 8) | newBlue;
blurredImage.setRGB(i, j, newColor);
}
}
return blurredImage;
}
}এখানে একটি সাধারণ গড় ব্লার ফিল্টার প্রয়োগ করা হয়েছে যা পিক্সেলের আশেপাশের পিক্সেলগুলির গড় মান ব্যবহার করে ছবির মোলায়েমতা বৃদ্ধি করে।
২. শার্পেন (Sharpen)
শার্পেন ফিল্টার একটি ছবির তীক্ষ্ণতা বাড়াতে ব্যবহৃত হয়। এটি পিক্সেলগুলির পার্থক্য বাড়ায় এবং চিত্রের প্রান্তকে স্পষ্ট করে, যার ফলে ছবির বিস্তারিত প্রভাব বৃদ্ধি পায়।
উদাহরণ: শার্পেন ফিল্টার
import java.awt.image.BufferedImage;
public class ImageSharpness {
public static BufferedImage applySharpness(BufferedImage image) {
int width = image.getWidth();
int height = image.getHeight();
BufferedImage sharpenedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// Sharpness kernel
int[] kernel = { 0, -1, 0, -1, 5, -1, 0, -1, 0 }; // 3x3 kernel for sharpening
for (int i = 1; i < width - 1; i++) {
for (int j = 1; j < height - 1; j++) {
int sumRed = 0, sumGreen = 0, sumBlue = 0;
int kernelIndex = 0;
// Apply 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[kernelIndex];
sumGreen += green * kernel[kernelIndex];
sumBlue += blue * kernel[kernelIndex];
kernelIndex++;
}
}
// Normalize and update 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;
sharpenedImage.setRGB(i, j, newColor);
}
}
return sharpenedImage;
}
}এখানে শার্পেন ফিল্টার ব্যবহৃত হয়েছে যা পিক্সেলগুলির পার্শ্ববর্তী পিক্সেলগুলির মান বৃদ্ধি করে ছবির স্পষ্টতা উন্নত করে।
৩. গাউসিয়ান ব্লার (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;
}
}এখানে গাউসিয়ান ব্লার ফিল্টার একটি গাউসিয়ান বন্টন ব্যবহার করে ছবির বিভিন্ন পিক্সেলগুলির মান কমিয়ে এবং মোলায়েম করে।
সারসংক্ষেপ
ইমেজ ফিল্টারিং হলো ডিজিটাল ইমেজ প্রসেসিংয়ের একটি গুরুত্বপূর্ণ অংশ যা বিভিন্ন ফিল্টার প্রয়োগ করে ছবির গুণগত মান বৃদ্ধি করতে সাহায্য করে। এখানে ব্লার, শার্পেন, এবং গাউসিয়ান ব্লার ফিল্টার ব্যবহারের মাধ্যমে ছবি পরিবর্তন এবং উন্নতি
করা সম্ভব। এই ফিল্টারগুলি বিভিন্ন আলগোরিদম ব্যবহার করে পিক্সেল ডেটার উপর প্রভাব ফেলে এবং ছবির পারফরম্যান্স ও দৃশ্যমানতা বৃদ্ধি করে।
Read more