При обработке изображений фильтр верхних частот – это метод, используемый для улучшения или извлечения высокочастотной информации из изображения. Это помогает обнаружить края и другие мелкие детали за счет усиления изменений интенсивности пикселей. В этой статье мы рассмотрим различные методы реализации фильтров верхних частот как в пространственной, так и в частотной областях, а также приведем примеры кода, демонстрирующие их использование.
-
Методы пространственной области.
Методы пространственной области работают непосредственно со значениями пикселей изображения.-
Фильтр Лапласа:
Фильтр Лапласа обычно используется для обнаружения границ. Он усиливает высокочастотные компоненты за счет вычитания среднего значения соседних пикселей из центрального пикселя. Вот пример фрагмента кода с использованием 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()
-
-
Методы частотной области.
Методы частотной области включают преобразование изображения в частотную область с использованием таких методов, как преобразование Фурье. Фильтрация выполняется в частотной области, а затем результат преобразуется обратно в пространственную область.-
Фильтр высоких частот Баттерворта:
Фильтр высоких частот Баттерворта ослабляет низкочастотные компоненты, пропуская при этом высокочастотные компоненты. Вот пример фрагмента кода с использованием 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, []);
-
В этой статье мы рассмотрели различные методы применения фильтров верхних частот при обработке изображений. Мы обсудили методы пространственной области, такие как фильтры Лапласа, Собеля и Превитта, которые напрямую работают со значениями пикселей изображения. Мы также рассмотрели методы частотной области, в том числе фильтр верхних частот Баттерворта, который включает преобразование изображения в частотную область и применение операций фильтрации. Используя эти методы, мы можем улучшить высокочастотные детали и выделить края изображений.