Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МТ_ЛР6_Иванова_4117.docx
Скачиваний:
1
Добавлен:
29.04.2025
Размер:
21.42 Mб
Скачать

Листинг 3 — Метод обработки изображения согласно параметрам

def img_filter(L, filter, d_high_k, title, is_binarization=False):

Spectr, Spectr_dB = get_spectr(L)

Min_S = np.min(np.abs(Spectr))

if Min_S != 0:

eps = Min_S

else:

eps = np.max(np.abs(Spectr)) * 1e-9

M, N = L.shape[0], L.shape[1] # размеры изображения

# размер области НЧ в спектре:

d_high = round(d_high_k * np.minimum(M, N))

mask_high = filter(M, N, d_high)

plot_spectr(Spectr_dB, 'Исходный спектр')

Spectr_high_pass_filtered = np.fft.fftshift(np.fft.fft2(L))

Spectr_high_pass_filtered *= mask_high # умножили на маску

# обратное двумерное БПФ:

high_pass_filtered = \

np.fft.ifft2(np.fft.ifftshift(Spectr_high_pass_filtered))

# контроль правильности работы

print(np.max(np.abs(np.imag(high_pass_filtered)))/ \

np.max(np.abs(np.real(high_pass_filtered))))

high_pass_filtered = np.abs(high_pass_filtered.real)

# нормировка

edges_high_pass = cv2.normalize(high_pass_filtered,None, 0.0, 1.0,cv2.NORM_MINMAX)

edges_high_pass = 1 - edges_high_pass # инвертировали

# бинаризация

if is_binarization:

edges_high_pass = binarization(edges_high_pass, 0.8)

# отображение результата

plot_img(edges_high_pass, ('ФНЧ: ', title, ' срез = ' , d_high_k))

# амплитудный спектр после применения маски:

Spectr_dB = 20*np.log10(np.abs(Spectr_high_pass_filtered)+eps)

Spectr_dB[0,0] = 20*np.log10(np.max(np.abs(Spectr)))

# вывод нового спектра

plot_spectr(Spectr_dB, 'Амплитудный спектр после ФВЧ (дБ)')

# нормировка яркости

cv2.imwrite('edges_high_pass.jpg',

cv2.normalize((edges_high_pass*255).astype('uint8'),None, 0, 255, cv2.NORM_MINMAX))

img_filter(L, simple_fft, 0.2, "Простая фильтрация") # простейшая Фурье Фильтрация

img_filter(L, simple_fft, 0.5, "Простая фильтрация") # простейшая Фурье Фильтрация

img_filter(L, simple_fft, 0.7, "Простая фильтрация") # простейшая Фурье Фильтрация

img_filter(L, butter_fft, 0.2, "Фильтр Баттерворта") # Фурье Фильтрация Баттерворта

img_filter(L, butter_fft, 0.5, "Фильтр Баттерворта") # Фурье Фильтрация Баттерворта

img_filter(L, butter_fft, 0.9, "Фильтр Баттерворта",True) # Фурье Фильтрация Баттерворта

canny(input_image) # оператор Кэнни

В начале исходное изображение обработано методом простейшей Фурье фильтрации с параметрами среза Dup равными 0.2 и 0.5. Полученные результаты приведены на Рисунках 3-4. Также на Рисунках 5-6 отображены спектры полученных изображений.

На основе полученных изображений можно сделать вывод о том, что чем больше берётся размер подавляемой области (размеры маски в данном случае зависят от величины d_high) тем больше низких частот удаляется и тем более выраженным получается эффект фильтра низких частот. Однако если брать слишком большую область обнуления, то слишком много низких частот удаляется и из-за этого теряются контуры (как на Рисунке 6)

Рисунок 3 — Простейшая фильтрация, d_high 0.2

Рисунок 4 — Простейшая фильтрация, d_high 0.5

Рисунок 5 — Спектр полученного изображения (простейшая фильтрация , d_high 0.2)

Рисунок 6 - Спектр полученного изображения (простейшая фильтрация, d_high 0.5)

Далее исходное изображение было обработано при использовании более продвинутой Фурье фильтрации на основе фильтра Баттерворта. Были использованы параметры пространственной частоты среза 0.02 , 0.5 и 1. Полученные в результате изображения показаны на Рисунках 7-9. В соответствии с Рисунками 10-12 выведены отображения спектров полученных результатов.

В фильтре Баттерворта (butter_fft) малое значение среза делает фильтрацию слишком сильной, усиливая шум, а большое — даёт напротив слишком плавный эффект. Слишком низкое d_high приводит к потере деталей, слишком высокое — к размытию контуров.

Рисунок 7 — Фильтрация методом Баттерворта, срез 0.02

Рисунок 8 — Фильтрация методом Баттерворта, срез 0.5

Рисунок 9 — Фильтрация методом Баттерворта, срез 1

Рисунок 10 - Спектр полученного изображения (фильтрация Баттерворта, срез 0.02)

Рисунок 11 - Спектр полученного изображения (фильтрация Баттерворта, срез 0.5)

Рисунок 12 - Спектр полученного изображения (фильтрация Баттерворта, срез 1)

Далее исходное изображение была обработано посредством фильтрации Фурье-фильтром Баттерворта с оптимальным значением параметра частоты среза, равным 0.25, и последующей бинаризацией. Результат отображения продемонстрирован на Рисунке 13. Спектр полученного изображения выведен на Рисуке 14.

В результате получены достаточно чёткие контуры фигур, при этом не полученном изображении нельзя определить, какие фигуры изначально были чёрными, а какие белыми.

Рисунок 13 — Результат обработки изображения (Фильтр Баттерорта, срез 0.25, бинаризация)

Рисунок 14 — Спектр полученного изображения

Также опробован оператор Кэнни, позволяющий быстро реализовать фильтр низких частот изображения [2]. Результат, полученный при использовании данного модуля оказался наилучшим (Рисунок 15), так как контуры не только чёткие, но и отсутствуют лишние шумы, которые были получены при использовании фильтра Баттерворда.

Рисунок 15 — Результат оператора Кэнни

Полный программный код представлен в Приложении А.