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

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

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

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

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.

Рішення

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

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

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

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

single

Запитати АІ

expand

Запитати АІ

ChatGPT

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

close

Awesome!

Completion rate improved to 3.45

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

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

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

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

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.

Рішення

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

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

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

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

single

some-alt