Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мультимедиа7.docx
Скачиваний:
11
Добавлен:
20.06.2025
Размер:
14 Мб
Скачать
☆

Список использованных источников

  1. Обработка изображений с помощью библиотеки Python Pillow // URL: https://habr.com/ru/articles/681248/

  2. Документация skimage.filters (на англ. яз.) // URL: https://scikitimage.org/docs/stable/api/skimage.filters.html

  3. Intro to OpenCV for Image Processing with Python // URL: https://qviper.github.io/2022/09/24/intro-to-opencv-for-image-processing-python/

  4. Жаринов О.О. Учебно-методические материалы к выполнению лабораторной работы №7 по дисциплине “Мультимедиа-технологии “, гр.4116, 4117, 4018. ГУАП, 2025. – 21 с. (Интернет-ресурс) // URL: https://pro.guap.ru/inside/student/tasks/e4715578ed7486d8d1746488fafcaeed/download

Приложение а

import cv2

from skimage import restoration

import numpy as np

import matplotlib.pyplot as plt

# функция, создающая маску двоения

# size - размер размаза в пикселях

def double_mask(size):

k = np.zeros((size, size), dtype=np.float32)

# Находим центральную строку

center = (size-1) // 2

k[center, 0] = 1.0

k[center, -1] = 1.0

k = k/np.sum(k) # нормировка

return k

# Создаем три разные маски

size_original = 15

PSF_original = double_mask(size_original) # оригинальная маска

size_small_diff = 17

PSF_small_diff = double_mask(size_small_diff) # маска с небольшим отклонением

size_large_diff = 25

PSF_large_diff = double_mask(size_large_diff)

input_image = cv2.imread('C:/jjjj.jpg')

# нормировка данных изображения и перевод во float:

input_image = input_image.astype(np.float32)/255.

# Визуализация исходного размытого изображения

plt.figure(figsize=(10, 8))

plt.imshow(cv2.cvtColor(input_image, cv2.COLOR_BGR2RGB))

plt.title('Исходное размытое изображение')

plt.axis('off')

plt.tight_layout()

plt.show()

# Восстановление с правильной маской

print("\nВосстановление с правильной маской:")

noise_var = 0.01

image_deblur = input_image.copy()

for i in range(3):

image_deblur[:, :, i] = restoration.wiener(input_image[:, :, i], PSF_original, noise_var)

plt.figure()

plt.imshow(cv2.cvtColor(np.clip(image_deblur, 0, 1), cv2.COLOR_BGR2RGB))

plt.title('Восстановление с правильной маской')

plt.axis('off')

plt.tight_layout()

plt.show()

# Восстановление с маской с небольшим отклонением

print("\nВосстановление с маской с небольшим отклонением (~13%):")

image_deblur_small_diff = input_image.copy()

for i in range(3):

image_deblur_small_diff[:, :, i] = restoration.wiener(input_image[:, :, i], PSF_small_diff, noise_var)

plt.figure()

plt.imshow(cv2.cvtColor(np.clip(image_deblur_small_diff, 0, 1), cv2.COLOR_BGR2RGB))

plt.title('Восстановление с немного измененной маской')

plt.axis('off')

plt.tight_layout()

plt.show()

# Восстановление с маской с существенным отклонением

print("\nВосстановление с маской с существенным отклонением (~53%):")

image_deblur_large_diff = input_image.copy()

for i in range(3):

image_deblur_large_diff[:, :, i] = restoration.wiener(input_image[:, :, i], PSF_large_diff, noise_var)

plt.figure()

plt.imshow(cv2.cvtColor(np.clip(image_deblur_large_diff, 0, 1), cv2.COLOR_BGR2RGB))

plt.title('Восстановление с существенно измененной маской')

plt.axis('off')

plt.tight_layout()

plt.show()

# Теперь то же самое для метода Ричардсона-Люси

print("\nВосстановление методом Ричардсона-Люси:")

its = 25

image_deblur_rl = input_image.copy()

for i in range(3):

try:

image_deblur_rl[:, :, i] = restoration.richardson_lucy(

input_image[:, :, i], PSF_original, num_iter=its)

except:

print(f"Ошибка при восстановлении канала {i} с правильной маской")

plt.figure(figsize=(10, 8))

plt.imshow(cv2.cvtColor(np.clip(image_deblur_rl, 0, 1), cv2.COLOR_BGR2RGB))

plt.title('Ричардсон-Люси с правильной маской')

plt.axis('off')

plt.tight_layout()

plt.show()

image_deblur_rl_small = input_image.copy()

for i in range(3):

try:

image_deblur_rl_small[:, :, i] = restoration.richardson_lucy(

input_image[:, :, i], PSF_small_diff, num_iter=its)

except:

print(f"Ошибка при восстановлении канала {i} с немного измененной маской")

plt.figure(figsize=(10, 8))

plt.imshow(cv2.cvtColor(np.clip(image_deblur_rl_small, 0, 1), cv2.COLOR_BGR2RGB))

plt.title('Ричардсон-Люси с немного измененной маской')

plt.axis('off')

plt.tight_layout()

plt.show()

# С маской с существенным отклонением

image_deblur_rl_large = input_image.copy()

for i in range(3):

try:

image_deblur_rl_large[:, :, i] = restoration.richardson_lucy(

input_image[:, :, i], PSF_large_diff, num_iter=its)

except:

print(f"Ошибка при восстановлении канала {i} с существенно измененной маской")

plt.figure(figsize=(10, 8))

plt.imshow(cv2.cvtColor(np.clip(image_deblur_rl_large, 0, 1), cv2.COLOR_BGR2RGB))

plt.title('Ричардсон-Люси с существенно измененной маской')

plt.axis('off')

plt.tight_layout()

plt.show()

cv2.imwrite('C:/Users/Пользователь/Downloads/wiener_restored.jpg',

cv2.cvtColor((image_deblur * 255).astype(np.uint8), cv2.COLOR_RGB2BGR))

cv2.imwrite('C:/Users/Пользователь/Downloads/lucy_restored.jpg',

cv2.cvtColor((image_deblur_rl * 255).astype(np.uint8), cv2.COLOR_RGB2BG

Соседние файлы в предмете Мультимедиа технологии