থ্রেশহোল্ডিং হলো ইমেজ সেগমেন্টেশনের একটি সহজ টেকনিক। এটি প্রায়শই বাইনারি ইমেজ তৈরি করতে ব্যবহৃত হয়। এতে দिये गये থ্রেশহোল্ড মান سے বড় পিক্সেলগুলো একটি স্ট্যান্ডার্ড মান দিয়ে রিপ্লেস করা হয়।
- সিম্পল থ্রেশহোল্ডিং-এ থ্রেশহোল্ড মান পুরো ইমেজে কনস্ট্যান্ট থাকে।
- অ্যাডাপ্টিভ থ্রেশহোল্ডিং-এ ছোট রিজনের জন্য থ্রেশহোল্ড মান ক্যালকুলেট করা হয়, তাই ভিন্ন রিজনের জন্য ভিন্ন থ্রেশহোল্ড মান থাকে।
অথবা Otsu থ্রেশহোল্ড টেকনিক-এ থ্রেশহোল্ড মান স্বয়ংক্রিয়ভাবে নির্ধারিত হয়, এটি ইমেজ হিস্টোগ্রামের উপর ভিত্তি করে অপ্টিমাল থ্রেশহোল্ড মান বেছে নেয়।
Imgproc ক্লাসের threshold() মেথড নিম্নলিখিত প্যারামিটার গ্রহণ করে:
- দুটি Mat অবজেক্ট যা সোর্স এবং ডেস্টিনেশন ইমেজকে প্রতিনিধিত্ব করে।
- দুটি ইন্টিজার ভেরিয়েবল যা থ্রেশহোল্ড বা স্ট্যান্ডার্ড মানকে প্রতিনিধিত্ব করে।
- একটি ইন্টিজার ভেরিয়েবল যা সিম্পল থ্রেশহোল্ডের টাইপকে প্রতিনিধিত্ব করে।
প্যারামিটার হিসেবে গ্রহণ করে দেওয়া ইমেজে থ্রেশহোল্ড অপারেশন সম্পাদন করে এবং ফলাফল ডেস্টিনেশন ম্যাট্রিক্সে স্টোর করে।
Otsu থ্রেশহোল্ড টেকনিক প্রয়োগ করতে এই মেথডকে Imgproc.THRESH_OTSU টাইপ হিসেবে পাস করে কল করতে হয়।
উদাহরণ
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javafx.application.Application;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.stage.Stage;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class OtsuThresholding extends Application {
public void start(Stage stage) throws IOException {
// OpenCV কোর লাইব্রেরি লোড করা
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
String file = "D:\\Images\\win2.jpg";
Mat src = Imgcodecs.imread(file, Imgcodecs.IMREAD_GRAYSCALE);
// ডেস্টিনেশন ইমেজ স্টোর করার জন্য খালি ম্যাট্রিক্স
Mat dst = new Mat(src.rows(), src.cols(), src.type());
// সিম্পল থ্রেশহোল্ড প্রয়োগ
Imgproc.threshold(src, dst, 50, 255, Imgproc.THRESH_OTSU);
// ম্যাট্রিক্সকে JavaFX writable ইমেজে কনভার্ট
Image img = HighGui.toBufferedImage(dst);
WritableImage writableImage = SwingFXUtils.toFXImage((BufferedImage) img, null);
// ইমেজ ভিউ সেট করা
ImageView imageView = new ImageView(writableImage);
imageView.setX(10);
imageView.setY(10);
imageView.setFitWidth(575);
imageView.setPreserveRatio(true);
// Scene অবজেক্ট সেট করা
Group root = new Group(imageView);
Scene scene = new Scene(root, 595, 400);
stage.setTitle("Otsu Threshold");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
ইনপুট ইমেজ

আউটপুট
