Java DIP - Kutu Filtresi Uygulama
Bir görüntüyü bulanıklaştıran Box filtresi uyguluyoruz. Bir Kutu filtresi 3x3, 5x5, 9x9 vb. Boyutlarda olabilir.
Kullanırız OpenCV işlevi filter2DGörüntülere Kutu filtresi uygulamak için. Altında bulunabilirImgprocpaketi. Söz dizimi aşağıda verilmiştir -
filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );
İşlev bağımsız değişkenleri aşağıda açıklanmıştır -
Sr.No. | Argüman ve Açıklama |
---|---|
1 | src Kaynak görüntüdür. |
2 | dst Hedef görüntüdür. |
3 | depth Dst derinliğidir. Negatif bir değer (-1 gibi), derinliğin kaynakla aynı olduğunu gösterir. |
4 | kernel Görüntü üzerinden taranacak çekirdektir. |
5 | anchor Çapanın çekirdeğine göre konumudur. Konum Noktası (-1, -1) varsayılan olarak merkezi gösterir. |
6 | delta Evrişim sırasında her piksele eklenecek bir değerdir. Varsayılan olarak 0'dır. |
7 | BORDER_DEFAULT Bu değere varsayılan olarak izin veriyoruz. |
Filter2D () yönteminin dışında, Imgproc sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -
Sr.No. | Yöntem ve Açıklama |
---|---|
1 | cvtColor(Mat src, Mat dst, int code, int dstCn) Bir görüntüyü bir renk uzayından diğerine dönüştürür. |
2 | dilate(Mat src, Mat dst, Mat kernel) Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir. |
3 | equalizeHist(Mat src, Mat dst) Gri tonlamalı bir görüntünün histogramını eşitler. |
4 | filter2D(Mat src, Mat dst, int depth, Mat kernel, Point anchor, double delta) Çekirdek ile bir görüntüyü birleştirir. |
5 | GaussianBlur(Mat src, Mat dst, Size ksize, double sigmaX) Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır. |
6 | integral(Mat src, Mat sum) Bir görüntünün integralini hesaplar. |
Misal
Aşağıdaki örnek, bir Grayscale görüntüsüne Box filtresi uygulamak için Imgproc sınıfının kullanımını gösterir.
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
public class convolution {
public static void main( String[] args ) {
try {
int kernelSize = 9;
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
Mat source = Highgui.imread("grayscale.jpg", Highgui.CV_LOAD_IMAGE_GRAYSCALE);
Mat destination = new Mat(source.rows(),source.cols(),source.type());
Mat kernel = Mat.ones(kernelSize,kernelSize, CvType.CV_32F);
for(int i=0; i<kernel.rows(); i++) {
for(int j=0; j<kernel.cols(); j++) {
double[] m = kernel.get(i, j);
for(int k =0; k<m.length; k++) {
m[k] = m[k]/(kernelSize * kernelSize);
}
kernel.put(i,j, m);
}
}
Imgproc.filter2D(source, destination, -1, kernel);
Highgui.imwrite("output.jpg", destination);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
Çıktı
Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -
Gerçek görüntü
Bu örnekte, imajımızı aşağıdaki filtre (çekirdek) ile birleştiriyoruz. Bu filtre, boyutu büyüdükçe görüntünün bulanıklaşmasına neden olur.
Bu orijinal görüntü, aşağıda verilen 5 boyutlu kutu filtre ile birleştirilmiştir -
5 boyutlu kutu filtre
1/25 | 1/25 | 1/25 | 1/25 | 1/25 |
1/25 | 1/25 | 1/25 | 1/25 | 1/25 |
1/25 | 1/25 | 1/25 | 1/25 | 1/25 |
1/25 | 1/25 | 1/25 | 1/25 | 1/25 |
1/25 | 1/25 | 1/25 | 1/25 | 1/25 |