मॉर्फोलॉजिकल ऑपरेशन्स ऑपरेशन्स का एक सेट है जो दिए गए आकार के अनुसार इमेजेज को प्रोसेस करता है। इरोजन और डायलेशन दो बुनियादी मॉर्फोलॉजिकल ऑपरेशन्स हैं।
डायलेशन के दौरान, अतिरिक्त पिक्सल्स को इमेज सीमाओं में जोड़ा जाता है।
इरोजन के दौरान, अतिरिक्त पिक्सल्स को इमेज सीमाओं से हटा दिया जाता है।
जोड़े/हटाए गए पिक्सल्स की कुल संख्या उपयोग किए गए स्ट्रक्चरिंग एलिमेंट के आयामों पर निर्भर करती है। आप erode() और dilate() मेथड्स का उपयोग करके क्रमशः इरोजन और डायलेशन ऑपरेशन कर सकते हैं।
डायलेशन के अलावा, OpenCV अधिक मॉर्फोलॉजिकल ट्रांसफॉर्मेशन प्रदान करता है जैसे ओपनिंग, क्लोजिंग, मॉर्फोलॉजिकल ग्रेडिएंट, टॉप हैट, ब्लैक हैट।
मॉर्फोलॉजिकल क्लोजिंग
यह एक ऑपरेशन है जो इमेज पर डायलेशन लागू करने और फिर परिणामी इमेज को इरोड करने के बराबर है। इसका उपयोग करके, आप इमेज में छोटे छेद हटा/भर सकते हैं। संक्षेप में, मॉर्फोलॉजिकल क्लोजिंग का उपयोग इमेज से शोर हटाने के लिए किया जाता है।
आप इसे morphologyEx() मेथड का उपयोग करके इमेज पर लागू कर सकते हैं। यह मेथड स्वीकार करता है -
स्रोत और गंतव्य इमेजेज का प्रतिनिधित्व करने वाले दो Mat ऑब्जेक्ट्स।
मॉर्फोलॉजिकल ऑपरेशन के प्रकार का प्रतिनिधित्व करने वाला एक इंटीजर वेरिएबल।
कर्नेल मैट्रिक्स का प्रतिनिधित्व करने वाला एक Mat ऑब्जेक्ट।
इमेज पर मॉर्फोलॉजिकल ओपनिंग ऑपरेशन लागू करने के लिए आपको उपरोक्त निर्दिष्ट मेथड को Imgproc.MORPH_CLOSE को (तीसरे) पैरामीटर के रूप में पास करके, स्रोत, गंतव्य और कर्नेल मैट्रिक्स के साथ इनवोक करना होगा।
उदाहरण
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.CvType;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class MorphologicalClosing extends Application {
@Override
public void start(Stage stage) throws IOException {
// OpenCV कोर लाइब्रेरी लोड करना
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// इमेज डेटा पढ़ना
String file = "D:\\Images\\morph_input2.jpg";
Mat src = Imgcodecs.imread(file);
// गंतव्य मैट्रिक्स बनाना
Mat dst = new Mat(src.rows(), src.cols(), src.type());
// कर्नेल मैट्रिक्स ऑब्जेक्ट तैयार करना
Mat kernel = Mat.ones(5, 5, CvType.CV_32F);
// इमेज पर डायलेट लागू करना
Imgproc.morphologyEx(src, dst, Imgproc.MORPH_CLOSE, kernel);
// मैट्रिक्स को JavaFX राइटेबल इमेज में कनवर्ट करना
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("डायलेशन उदाहरण");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
इनपुट इमेज

आउटपुट
उपरोक्त प्रोग्राम निष्पादित करने पर निम्नलिखित आउटपुट उत्पन्न करता है -
