Учебники

Java DIP – Средневзвешенный фильтр

В средневзвешенном фильтре мы придавали больший вес значению центра, благодаря чему вклад центра становится больше, чем остальные значения. Благодаря средневзвешенной фильтрации мы можем контролировать размытие изображения.

Мы используем функцию OpenCV filter2D, чтобы применить средневзвешенный фильтр к изображениям. Его можно найти в пакете Imgproc . Его синтаксис приведен ниже –

filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );

Аргументы функции описаны ниже –

Sr.No. Аргумент и описание
1

ЦСИ

Это исходное изображение.

2

ДСТ

Это изображение назначения.

3

ddepth

Это глубина дст. Отрицательное значение (например, -1) указывает, что глубина такая же, как у источника.

4

ядро

Это ядро ​​для сканирования через изображение.

5

якорь

Это позиция якоря относительно его ядра. Местоположение Точка (-1, -1) указывает центр по умолчанию.

6

дельта

Это значение, которое будет добавлено к каждому пикселю во время свертки. По умолчанию это 0.

7

BORDER_DEFAULT

Мы допустим это значение по умолчанию.

ЦСИ

Это исходное изображение.

ДСТ

Это изображение назначения.

ddepth

Это глубина дст. Отрицательное значение (например, -1) указывает, что глубина такая же, как у источника.

ядро

Это ядро ​​для сканирования через изображение.

якорь

Это позиция якоря относительно его ядра. Местоположение Точка (-1, -1) указывает центр по умолчанию.

дельта

Это значение, которое будет добавлено к каждому пикселю во время свертки. По умолчанию это 0.

BORDER_DEFAULT

Мы допустим это значение по умолчанию.

Помимо метода filter2D (), есть и другие методы, предоставляемые классом Imgproc. Они описаны кратко –

Sr.No. Метод и описание
1

cvtColor (Mat src, Mat dst, int code, int dstCn)

Он преобразует изображение из одного цветового пространства в другое.

2

дилат (Mat src, Mat dst, Mat kernel)

Это расширяет изображение с помощью определенного структурирующего элемента.

3

equizeHist (Mat src, Mat dst)

Он выравнивает гистограмму изображения в градациях серого.

4

filter2D (Mat src, Mat dst, int глубина, ядро ​​Mat, точка привязки, двойная дельта)

Это сворачивает изображение с ядром.

5

GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)

Размытие изображения с использованием фильтра Гаусса.

6

интеграл (Mat src, Mat sum)

Он рассчитывает интеграл изображения.

cvtColor (Mat src, Mat dst, int code, int dstCn)

Он преобразует изображение из одного цветового пространства в другое.

дилат (Mat src, Mat dst, Mat kernel)

Это расширяет изображение с помощью определенного структурирующего элемента.

equizeHist (Mat src, Mat dst)

Он выравнивает гистограмму изображения в градациях серого.

filter2D (Mat src, Mat dst, int глубина, ядро ​​Mat, точка привязки, двойная дельта)

Это сворачивает изображение с ядром.

GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)

Размытие изображения с использованием фильтра Гаусса.

интеграл (Mat src, Mat sum)

Он рассчитывает интеграл изображения.

пример

В следующем примере демонстрируется использование класса Imgproc для применения фильтра средневзвешенного значения к изображению Graycale.

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++) {

                  if(i==1 && j==1) {
                     m[k] = 10/18;
                  }
                  else{
                     m[k] = m[k]/(18);
                  }
               }
               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());
      }
   }
}

Выход

Когда вы выполняете данный код, вы увидите следующий вывод:

Исходное изображение

Учебник по применению средневзвешенного фильтра

Это оригинальное изображение свернуто с фильтром взвешенного среднего, как показано ниже –