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.

Рішення

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

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

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

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

single

Запитати АІ

expand

Запитати АІ

ChatGPT

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

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

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

some-alt