OpenCV - Genişleme
Erozyon ve genişleme iki tür morfolojik işlemdir. Adından da anlaşılacağı gibi morfolojik işlemler, görüntüleri şekillerine göre işleyen işlemler dizisidir.
Verilen girdi görüntüsüne bağlı olarak bir "yapısal eleman" geliştirilir. Bu, iki prosedürden herhangi birinde yapılabilir. Bunlar, görüntüyü netleştirmek için gürültüyü gidermeyi ve kusurları gidermeyi amaçlamaktadır.
Genişleme
Bu prosedür, kare veya daire gibi belirli bir şeklin bazı çekirdeği ile evrişimi takip eder. Bu çekirdeğin merkezini belirten bir çapa noktası vardır.
Bu çekirdek, maksimum piksel değerini hesaplamak için resmin üzerine biner. Hesaplandıktan sonra resim ortada çapa ile değiştirilir. Bu prosedürle, parlak bölgelerin alanları boyut olarak büyür ve dolayısıyla görüntü boyutu artar.
Örneğin, beyaz gölgeli veya parlak gölgeli bir nesnenin boyutu artarken, siyah veya koyu gölgeli bir nesnenin boyutu azalır.
Genişletme işlemini bir görüntü üzerinde, dilate() yöntemi imgprocsınıf. Bu yöntemin sözdizimi aşağıdadır.
dilate(src, dst, kernel)
Bu yöntem aşağıdaki parametreleri kabul eder -
src - bir Mat Bu işlem için kaynağı (giriş görüntüsü) temsil eden nesne.
dst - bir Mat Bu işlem için hedefi (çıktı görüntüsü) temsil eden nesne.
kernel - bir Mat çekirdeği temsil eden nesne.
Misal
Çekirdek matrisini şu şekilde hazırlayabilirsiniz: getStructuringElement()yöntem. Bu yöntem, temsil eden bir tamsayı kabul edermorph_rect tip ve tipte bir nesne Size.
Imgproc.getStructuringElement(int shape, Size ksize);
Aşağıdaki program, belirli bir görüntü üzerinde genişletme işleminin nasıl gerçekleştirileceğini gösterir.
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");
}
}
Giriş
Aşağıdakinin giriş görüntüsü olduğunu varsayalım sample.jpg yukarıdaki programda belirtilmiştir.
Çıktı
Programı çalıştırırken aşağıdaki çıktıyı alacaksınız -
Image Processed
Belirtilen yolu açarsanız, çıktı görüntüsünü aşağıdaki gibi gözlemleyebilirsiniz -