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

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

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

Suggested prompts:

Can you explain the difference between high-pass and low-pass filtering in more detail?

How do I choose the size of the mask for filtering?

What are some practical applications of these filters in image processing?

close

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