Фильтр верхних частот при обработке изображений: методы и примеры кода

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

  1. Методы пространственной области.
    Методы пространственной области работают непосредственно со значениями пикселей изображения.

    • Фильтр Лапласа:
      Фильтр Лапласа обычно используется для обнаружения границ. Он усиливает высокочастотные компоненты за счет вычитания среднего значения соседних пикселей из центрального пикселя. Вот пример фрагмента кода с использованием OpenCV в Python:

      import cv2
      def laplacian_filter(image):
       laplacian = cv2.Laplacian(image, cv2.CV_64F)
       return laplacian
      # Load and apply Laplacian filter
      image = cv2.imread('image.jpg', 0)
      filtered_image = laplacian_filter(image)
      # Display the filtered image
      cv2.imshow('Filtered Image', filtered_image)
      cv2.waitKey(0)
      cv2.destroyAllWindows()
    • Фильтр Собеля.
      Фильтр Собеля — еще один популярный метод обнаружения границ. Он вычисляет градиент интенсивности изображения для каждого пикселя. Вот пример фрагмента кода с использованием OpenCV:

      import cv2
      def sobel_filter(image):
       sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
       sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)
       sobel = cv2.addWeighted(sobel_x, 0.5, sobel_y, 0.5, 0)
       return sobel
      # Load and apply Sobel filter
      image = cv2.imread('image.jpg', 0)
      filtered_image = sobel_filter(image)
      # Display the filtered image
      cv2.imshow('Filtered Image', filtered_image)
      cv2.waitKey(0)
      cv2.destroyAllWindows()
    • Фильтр Превитта:
      Фильтр Превитта аналогичен фильтру Собеля и используется для обнаружения границ. Он вычисляет величину градиента в направлениях x и y. Вот пример фрагмента кода с использованием Python:

      import numpy as np
      from scipy import ndimage
      def prewitt_filter(image):
       dx = ndimage.prewitt(image, axis=0)
       dy = ndimage.prewitt(image, axis=1)
       gradient_magnitude = np.hypot(dx, dy)
       return gradient_magnitude
      # Load and apply Prewitt filter
      image = cv2.imread('image.jpg', 0)
      filtered_image = prewitt_filter(image)
      # Display the filtered image
      cv2.imshow('Filtered Image', filtered_image)
      cv2.waitKey(0)
      cv2.destroyAllWindows()
  2. Методы частотной области.
    Методы частотной области включают преобразование изображения в частотную область с использованием таких методов, как преобразование Фурье. Фильтрация выполняется в частотной области, а затем результат преобразуется обратно в пространственную область.

    • Фильтр высоких частот Баттерворта:
      Фильтр высоких частот Баттерворта ослабляет низкочастотные компоненты, пропуская при этом высокочастотные компоненты. Вот пример фрагмента кода с использованием MATLAB:

      image = imread('image.jpg');
      image = rgb2gray(image);
      % Convert image to frequency domain
      fft_image = fftshift(fft2(image));
      % Define filter parameters
      D0 = 20;  % Cutoff frequency
      n = 2;    % Order of the filter
      % Create the Butterworth high pass filter
      [rows, cols] = size(image);
      center_x = floor(cols/2) + 1;
      center_y = floor(rows/2) + 1;
      [X, Y] = meshgrid(1:cols, 1:rows);
      distance = sqrt((X - center_x).^2 + (Y - center_y).^2);
      H = 1 - 1./(1 + (distance./D0).^(2*n));
      % Apply the filter in the frequency domain
      filtered_image = real(ifft2(ifftshift(fft_image .* H)));
      % Display the filtered image
      imshow(filtered_image, []);

В этой статье мы рассмотрели различные методы применения фильтров верхних частот при обработке изображений. Мы обсудили методы пространственной области, такие как фильтры Лапласа, Собеля и Превитта, которые напрямую работают со значениями пикселей изображения. Мы также рассмотрели методы частотной области, в том числе фильтр верхних частот Баттерворта, который включает преобразование изображения в частотную область и применение операций фильтрации. Используя эти методы, мы можем улучшить высокочастотные детали и выделить края изображений.