Эрозия и расширение являются двумя типами морфологических операций. Как следует из названия, морфологические операции — это набор операций, которые обрабатывают изображения в соответствии с их формами.
На основе данного входного изображения разработан «структурный элемент». Это может быть сделано в любой из двух процедур. Они направлены на устранение шума и устранение недостатков, чтобы сделать изображение четким.
расширение
Эта процедура следует за сверткой с некоторым ядром определенной формы, такой как квадрат или круг. Это ядро имеет опорную точку, которая обозначает его центр.
Это ядро накладывается на изображение, чтобы вычислить максимальное значение пикселя. После расчета картина заменяется на якорь в центре. При этой процедуре области ярких областей увеличиваются в размере и, следовательно, увеличивается размер изображения.
Например, размер объекта в белом оттенке или ярком оттенке увеличивается, в то время как размер объекта в черном оттенке или темном оттенке уменьшается.
Вы можете выполнить операцию расширения изображения, используя метод dlate () класса imgproc . Ниже приводится синтаксис этого метода.
dilate(src, dst, kernel)
Этот метод принимает следующие параметры —
-
src — Объект Mat, представляющий источник (входное изображение) для этой операции.
-
dst — объект Mat, представляющий место назначения (выходное изображение) для этой операции.
-
kernel — объект Mat, представляющий ядро.
src — Объект Mat, представляющий источник (входное изображение) для этой операции.
dst — объект Mat, представляющий место назначения (выходное изображение) для этой операции.
kernel — объект Mat, представляющий ядро.
пример
Вы можете подготовить матрицу ядра, используя метод getStructuringElement () . Этот метод принимает целое число, представляющее тип morph_rect и объект типа Size .
Imgproc.getStructuringElement(int shape, Size ksize);
Следующая программа демонстрирует, как выполнить операцию расширения на данном изображении.
import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.Size; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; public class DilateTest { public static void main( String[] args ) { // Loading the OpenCV core library System.loadLibrary( Core.NATIVE_LIBRARY_NAME ); // Reading the Image from the file and storing it in to a Matrix object String file ="C:/EXAMPLES/OpenCV/sample.jpg"; Mat src = Imgcodecs.imread(file); // Creating an empty matrix to store the result Mat dst = new Mat(); // Preparing the kernel matrix object Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size((2*2) + 1, (2*2)+1)); // Applying dilate on the Image Imgproc.dilate(src, dst, kernel); // Writing the image Imgcodecs.imwrite("E:/OpenCV/chap10/Dilation.jpg", dst); System.out.println("Image Processed"); } }
вход
Предположим, что ниже указано входное изображение sample.jpg, указанное в вышеуказанной программе.
Выход
При выполнении программы вы получите следующий вывод:
Image Processed
Если вы откроете указанный путь, вы можете наблюдать выходное изображение следующим образом —