single
Низькочастотні та Високочастотні Фільтри
Свайпніть щоб показати меню
Однією з ключових переваг перетворення Фур'є є можливість виконання високочастотної та низькочастотної фільтрації.
Після застосування перетворення Фур'є:
dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)
необхідно створити фільтруючу маску
Низькочастотна фільтрація (розмиття)
Низькочастотний фільтр видаляє високочастотні компоненти, що призводить до розмиття зображення. Маска низькочастотного фільтра:
rows, cols = image.shape
crow, ccol = rows // 2, cols // 2
mask = np.zeros((rows, cols), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1
rows, cols = image.shape: отримує кількість рядків і стовпців із зображення у відтінках сірого;crow, ccol = rows // 2, cols // 2: обчислює координати центру зображення;mask = np.zeros((rows, cols), np.uint8): створює маску з нулями з такими ж розмірами, як і зображення;mask[crow-30:crow+30, ccol-30:ccol+30] = 1: встановлює квадратну область 60×60 у центрі маски в 1, пропускаючи лише низькочастотні компоненти (поблизу центру частотної області) та відсікаючи високочастотні деталі.
Високочастотна фільтрація (Виявлення контурів)
Високочастотний фільтр видаляє низькочастотні компоненти та підсилює контури. Маска високих частот:
highpass_mask = np.ones((rows, cols), np.uint8)
highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
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_inverse = np.fft.ifftshift(dft_filtered) # Inverse shifting
image_filtered = np.fft.ifft2(dft_inverse) # Inverse transformation
image_filtered = np.abs(image_filtered) # Remove negative values
dft_filtered = dft_shift * mask: застосування маски у частотній області (наприклад, низькочастотної або високочастотної) шляхом поелементного множення із зсунутою ДПФ зображення;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.
- Виконайте зворотне зміщення та збережіть у
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат