Низькочастотні та Високочастотні Фільтри
Однією з ключових переваг перетворення Фур'є є можливість виконання високочастотної та низькочастотної фільтрації.
Після застосування перетворення Фур'є:
необхідно створити фільтруючу маску
Низькочастотна фільтрація (розмиття)
Низькочастотний фільтр видаляє високочастотні компоненти, що призводить до розмиття зображення. Маска низькочастотного фільтра:
rows, cols = image.shape
: retrieves the number of rows and columns from the grayscale image;crow, ccol = rows // 2, cols // 2
: computes the center coordinates of the image;mask = np.zeros((rows, cols), np.uint8)
: creates a mask of zeros with the same dimensions as the image;mask[crow-30:crow+30, ccol-30:ccol+30] = 1
: sets a 60×60 square region at the center of the mask to 1, allowing only the low-frequency components (near the center of the frequency domain) to pass through while filtering out high-frequency details.
Високочастотна фільтрація (Виявлення контурів)
Високочастотний фільтр видаляє низькочастотні компоненти та підсилює краї. Маска високих частот:
highpass_mask = np.ones((rows, cols), np.uint8)
: ініціалізує маску з одиниць з такими ж розмірами, як і зображення, тобто всі частоти спочатку пропускаються;highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
: встановлює невеликий квадрат 10×10 у центрі (область низьких частот) у нуль, ефективно блокуючи ці частоти.
Застосування фільтра
Після створення маски необхідно застосувати фільтр і перетворити зображення назад у просторову область:
dft_filtered = dft_shift * mask
: застосування маски у частотній області (наприклад, низькочастотний або високочастотний фільтр) шляхом поелементного множення зі зсунутою DFT зображення;dft_inverse = np.fft.ifftshift(dft_filtered)
: скасування попереднього зсуву для повернення частотних компонентів на їхні початкові позиції;image_filtered = np.fft.ifft2(dft_inverse)
: обчислення оберненого перетворення Фур'є для перетворення відфільтрованих частотних даних назад у просторову область;image_filtered = np.abs(image_filtered)
: взяття модуля для усунення залишкових уявних компонентів, отримання дійсного відфільтрованого зображення.
Swipe to start coding
Вам надано зображення вівці у змінній image
та зображення у частотній області у змінній dft_shift
:
- Отримайте розмірність матриці
image
та збережіть у зміннихrows
іcols
; - Обчисліть центральну точку та збережіть у
crow
іccol
; - Визначте
low_mask
як масив із нулями розміром(rows, cols)
та типомnp.uint8
; - Виберіть 20x20 центральну область у
low_mask
та заповніть її значеннями1
. - Визначте
high_mask
як масив із одиницями розміром(rows, cols)
та типомnp.uint8
; - Виберіть 20x20 центральну область у
high_mask
та заповніть її значеннями0
; - Застосуйте
low_mask
іhigh_mask
доdft_shift
та збережіть відфільтровані частоти уlowpass_dft_filtered
таhighpass_dft_filtered
відповідно; - Виконайте обернене перетворення для
lowpass_dft_filtered
:- Виконайте зворотне зміщення та збережіть у
lowpass_dft_inverse
; - Виконайте обернене перетворення та збережіть зображення у
image_lowpass
; - Видаліть від'ємні значення для
image_lowpass
.
- Виконайте зворотне зміщення та збережіть у
- Виконайте обернене перетворення для
highpass_dft_inverse
:- Виконайте зворотне зміщення та збережіть у
lowpass_dft_inverse
; - Виконайте обернене перетворення та збережіть зображення у
image_highpass
; - Видаліть від'ємні значення для
image_highpass
.
- Виконайте зворотне зміщення та збережіть у
Рішення
Дякуємо за ваш відгук!