Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Низькочастотні та Високочастотні Фільтри | Обробка Зображень з OpenCV
Основи Комп'ютерного Зору

bookНизькочастотні та Високочастотні Фільтри

Однією з ключових переваг перетворення Фур'є є можливість виконання високочастотної та низькочастотної фільтрації.

Після застосування перетворення Фур'є:

необхідно створити фільтруючу маску

Низькочастотна фільтрація (розмиття)

Низькочастотний фільтр видаляє високочастотні компоненти, що призводить до розмиття зображення. Маска низькочастотного фільтра:

  • 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.

Рішення

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 3
single

single

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Suggested prompts:

Сумаризуйте цей розділ

Пояснити код у file

Пояснити, чому file не вирішує завдання

close

Awesome!

Completion rate improved to 3.45

bookНизькочастотні та Високочастотні Фільтри

Свайпніть щоб показати меню

Однією з ключових переваг перетворення Фур'є є можливість виконання високочастотної та низькочастотної фільтрації.

Після застосування перетворення Фур'є:

необхідно створити фільтруючу маску

Низькочастотна фільтрація (розмиття)

Низькочастотний фільтр видаляє високочастотні компоненти, що призводить до розмиття зображення. Маска низькочастотного фільтра:

  • 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.

Рішення

Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

close

Awesome!

Completion rate improved to 3.45
Секція 2. Розділ 3
single

single

some-alt