6
.pdf
Рисунок 12 – Обработанное изображение |
Рисунок 13 – Амплитудный спектр |
с параметром среза частоты фильтра 0.40 |
обработанного изображения |
После этого перейдем к обработке изображения посредством фильтрации Фурье-фильтром Баттерворта с оптимальным значением параметра частоты среза и последующей бинаризацией. Код такой программы представлен в Листинге 3. Результат обработки исходного изображения представлен на рисунках 14 и 15. Результат обработки изображения с рисунка
8 представлен на рисунках 16 и 17.
Листинг 3. Обработка изображения Фурье-фильтром Баттерворта с последующей
бинаризацией.
import cv2
import numpy as np
import matplotlib.pyplot as plt
# Чтение изображения
input_image = cv2.imread('LR6.jpg')
#Преобразование изображения в черно-белое, чтобы работать только с гранями
L = cv2.cvtColor(input_image, cv2.COLOR_BGR2GRAY)
#Визуализация исходного изображения
plt.figure()
plt.imshow(cv2.cvtColor(input_image, cv2.COLOR_BGR2RGB)) plt.title('Исходное изображение')
11
plt.axis('off') # Убираем оси plt.tight_layout()
plt.show()
#Выполнение двумерного центрированного БПФ для получения спектра
Spectr = np.fft.fftshift(np.fft.fft2(L))
#Вычисление компоненты нормировки
Min_S = np.min(np.abs(Spectr))
eps = Min_S if Min_S != 0 else np.max(np.abs(Spectr)) * 1e-9 # Защита от деления на ноль
# Фильтр высоких частот (ФВЧ) с маской Баттерворта M, N = L.shape # Получаем размеры изображения
d_high = round(0.20 * np.minimum(M, N)) # Оптимальный размер области НЧ в спектре
K = 4 # Порядок фильтра Баттерворта deg = 2 * K # Степень фильтра
mask_high = np.zeros((M, N)) # Инициализация маски высокого пропускания Cm, Cn = M / 2, N / 2 # Координаты центра маски
#Формирование маски Баттерворта for m in range(M):
for n in range(N):
d = np.sqrt((m - Cm) ** 2 + (n - Cn) ** 2) # Расчет расстояния до
центра
mask_high[m, n] = (d / d_high) ** K / np.sqrt(1 + (d / d_high) ** deg) # Формула Баттерворта
#Применяем маску Баттерворта к спектру
Spectr_high_pass_filtered = Spectr * 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 # Инвертирование изображения для акцента на краях
# Бинаризация результата
threshold_value = 0.75 # Порог для бинаризации
thr, edges_high_pass = cv2.threshold(edges_high_pass, threshold_value, 1.0, cv2.THRESH_BINARY)
# Визуализация результата бинаризации plt.figure()
plt.imshow(edges_high_pass, cmap='gray') plt.title('Бинаризованное изображение после ФВЧ') plt.axis('off') # Убираем оси
plt.tight_layout() plt.show()
12
# Вычисление амплитудного спектра после применения маски
Spectr_dB = 20 * np.log10(np.abs(Spectr_high_pass_filtered) + eps)
#Исправляем цвет для отображения, чтобы избежать проблем с битой точкой
Spectr_dB[0, 0] = 20 * np.log10(np.max(np.abs(Spectr)))
#Визуализация амплитудного спектра в дБ
plt.figure() plt.imshow(Spectr_dB, cmap='jet')
plt.title('Амплитудный спектр после ФВЧ (дБ)') plt.axis('off') # Убираем оси plt.tight_layout()
plt.show()
# Сохранение итогового бинаризованного изображения с нормировкой (яркость от 0 до 255)
cv2.imwrite('LR6.8.jpg', cv2.normalize((edges_high_pass * 255).astype('uint8'), None, 0, 255, cv2.NORM_MINMAX))
Рисунок 14 – Обработанное изображение
Рисунок 15 – Амплитудный спектр обработанного изображения
13
Рисунок 16 – Обработанное изображение |
Рисунок 17 – Амплитудный спектр |
|
обработанного изображения |
Метод Кэнни для фильтрации изображения обеспечивает высокое качество выделения границ, делая их более четкими и четко очерченными.
Используя градиентные усилия, метод Кэнни эффективно обнаруживает значительные изменения интенсивности пикселей, что приводит к созданию аккуратных и тонких границ толщиной в 1 пиксель.
После применения данного метода границы изображения становятся исключительно четкими, что значительно улучшает возможности для их дальнейшей параметризации и анализа. Это свойство делает метод Кэнни идеальным выбором для задач, требующих высокой степени детализации,
включая обработку и анализ изображений в различных областях, таких как компьютерное зрение и машинное обучение. Программный код показан в листинге 4. Результаты реализации на рисунках 18 и 19.
Листинг 4. Программа обработки изображения при помощи метода Кэнни,
выделяющего края объектов
import cv2
import numpy as np
14
import matplotlib.pyplot as plt
# Чтение изображения
input_image = cv2.imread('LR6.jpg')
#Преобразование изображения в черно-белое, чтобы работать только с гранями
L = cv2.cvtColor(input_image, cv2.COLOR_BGR2GRAY)
#Визуализация исходного изображения
plt.figure()
plt.imshow(cv2.cvtColor(input_image, cv2.COLOR_BGR2RGB)) plt.title('Исходное изображение')
plt.axis('off') # Убираем оси plt.tight_layout()
plt.show()
#Применяем оператор Кэнни для обнаружения границ
#Параметры threshold1 и threshold2 можно настраивать
edges_canny = cv2.Canny(input_image, threshold1=50, threshold2=150)
#Инвертируем изображение, чтобы акцентировать границы edges_canny = 255 - edges_canny
#Визуализация результата работы оператора Кэнни plt.figure()
plt.imshow(edges_canny, cmap='gray') plt.title('Оператор Кэнни') plt.axis('off') # Убираем оси plt.tight_layout()
plt.show()
#Сохранение итогового бинаризованного изображения с нормировкой (яркость от
0 до 255)
cv2.imwrite('LR6.7.jpg', edges_canny)
#Визуализация амплитудного спектра (если необходимо, в противном случае этот шаг можно убрать)
#Для завершения процесса, можно показать, как изменился результат сравнения с оригиналом
Spectr_dB = 20 * np.log10(np.abs(np.fft.fftshift(np.fft.fft2(L))) + 1e-9)
#Исправляем цвет для отображения, чтобы избежать проблем с битой точкой
Spectr_dB[0, 0] = 20 * np.log10(np.max(np.abs(Spectr_dB)))
#Визуализация амплитудного спектра
plt.figure() plt.imshow(Spectr_dB, cmap='jet')
plt.title('Амплитудный спектр (дБ)') plt.axis('off') # Убираем оси plt.tight_layout()
plt.show()
15
Рисунок 18 – Обработанное изображение |
Рисунок 19 – Амплитудный спектр |
|
обработанного изображения |
16
Вывод Применение методов фильтрации, таких как фильтр Фурье,
продемонстрировало свою эффективность в улучшении качества изображений. Личное оптимальное значение среза, равное 20, по моему мнению, оказало наилучший эффект, позволяя добиться стабильного качества изображения с явным улучшением результатов бинаризации. Применение бинаризации не улучшило качество изображения.
Кроме того, метод Кэнни стал значимым инструментом в арсенале инструментов обработки изображений. Его способность точно выделять границы делает процесс работы с изображениями, более захватывающим и продуктивным. Я получила удовольствие от работы с данным методом, и
результаты не разочаровали. В целом, обе техники открыли новые горизонты для анализа изображений, позволяя достичь высокой четкости и детализации,
что является неотъемлемой частью успешной обработки визуальной информации.
Ссылка на изображения: https://drive.google.com/drive/folders/1- T1Y_1foDcRzw5ROi7un1AuykKyI-kU1?usp=drive_link
17
Список используемых источников:
1.Основы цифровой обработки изображений: учеб. пособие / Жаринов О.О. СПб: ГУАП, 2023. – 122 с.
2.Binarize image with Python, NumPy, OpenCV // URL: https://note.nkmk.me/en/python-numpy-opencv-image-binarization/
3.Opencv Edge Detection / S.Jones. 2023. // URL: https://www.mo4tech.com/opencv-edge-detection.html
4.Digital image processing 100 question -19 LOG filter // URL: https://programmersought.com/article/297511641467/
5.Python Image Processing OpenCV / D.Wright. 2024. // URL: https://www.mo4tech.com/python-image-processing-opencv-12-roberts- operatorprewitt-operator-sobel-operator-and-laplacian-operator-edge- etectiontechniques.html
6.Жаринов О.О. Учебно-методические материалы к выполнению лабораторной работы №6 по дисциплине “Мультимедиа-технологии“, гр. Z0411, ГУАП, 2025. – 12 с.
18
