Skip to content

Latest commit

 

History

History
200 lines (153 loc) · 11.4 KB

File metadata and controls

200 lines (153 loc) · 11.4 KB

Лабораторная работа № 3

Работа с многомерными массивами

Теория

Изображения

Изображения представляют собой многомерные массивы (матрицы) пикселей. Каждый пиксель содержит значение яркости, которое влияет на цвет изображения.

Основные компоненты:

  • Размер - длина и ширина изображения, измеряется в количестве пикселей.
  • Каналы - третье измерение после длины и ширины. Количество каналов влияет на цвет изображения. Цветные изображения обычно имеют 3 канала - красный, зелёный и синий (r, g, b), полутоновые и бинарные - один канал (значение яркости). Изображения с прозрачностью имеют 4 канала (r, g, b, a), где четвёртый канал отвечает за прозрачность.
  • Пиксель - наименьшая неделимая единица изображения. Пиксель имеет яркость от 0 до 255 (uint) или от 0 до 1 (float). Пиксель может содержать от 1 до 4 значений в зависимости от количества каналов изображения. Например, пиксель зелёного цветя будет иметь значение (0, 255, 0).

Аудиофайлы

Аудиофайлы представляют собой одномерные (моно) или двумерные (стерео) массивы, состоящие из сэмплов.

Основные компоненты:

  • Размер - длина массива, количество сэмплов.
  • Сэмпл - мгновенное значение амплитуды звуковой волны.
  • Амплитуда - значение каждого сэмпла. Имеет значение от -1.0 до 1.0.
  • Частота дискретизации - количество сэмпловв секунду, измеряется в герцах (Гц, Hz). Влияет на качество аудио. Стандартное качество CD - 44100 Hz.
  • Длительность - размер, делённый на частоту дискретизации (получаем длину аудио в секундах).

NumPy

NumPy - это библиотека для работы с многомерными массивами и матричными операциями. Обеспечивает высокую производительность за счет реализации на C/C++.

Установка:

pip install numpy

Ключевые возможности:

  • N-мерные массивы (ndarray)
  • Математические функции (линейная алгебра, преобразование Фурье)
  • Инструменты для интеграции с C/C++

OpenCV

OpenCV — это открытая библиотека для компьютерного зрения и обработки изображений. Она была разработана для решения задач, связанных с обработкой и анализом изображений и видео.

Установка:

pip install opencv-python

Пример использования:

import cv2  # импорт
# Также возможен следующий вариант импорта:
# from cv2 import cv2

img = cv2.imread('image.jpg')  # загрузка изображения

cv2.imshow('girl', img)  # отображение
cv2.waitKey(0)

cv2.imwrite('image2.jpg', img)  # сохранение изображения

Поскольку изображение представляет собой многомерный массив, то к нему могут быть применены операции из библиотеки numpy, например:

img[0, 0, :] = 255  # замена значения пикселя
shape = img.shape  # получение размера
img2 = img.astype(np.uint8)  # преобразование типов

SoundFile

SoundFile — библиотека для чтения и записи аудиофайлов. Данные загружаются в формате массивов numpy.

Установка:

pip install soundfile

Пример использования:

import soundfile as sf

# Загрузка аудио
data, samplerate = sf.read('audio.mp3')

print(f"Массив сэмплов: {data}")
print(f"Частота дискретизации: {samplerate}")

# Сохранение аудио  
sf.write('new_audio.mp3', data, samplerate)

Matplotlib

Matplotlib — это библиотека для визуализации данных в Python, которая позволяет создавать статические, анимационные и интерактивные графики.

Установка:

pip install matplotlib

Пример отображения изображения:

import matplotlib.pyplot as plt  # импорт
plt.imshow(img)  # загрузка изображения
plt.show()  # отображение

Пример построения графика синуса:

import matplotlib.pyplot as plt
import numpy as np

# создание данных
x = np.linspace(0, 10, 100)  # 100 точек от 0 до 10
y = np.sin(x)  # нахождение синуса

# создание графика
plt.figure(figsize=(10, 5))  # размер графика

plt.plot(x, y, label='sin(x)', color='blue')  # линейный график синуса
plt.title('График синуса')  # заголовок графика
plt.xlabel('x')  # подпись оси x
plt.ylabel('sin(x)')  # подпись оси y
plt.axhline(0, color='black',linewidth=0.5, ls='--')  # линия по оси x
plt.axvline(0, color='black',linewidth=0.5, ls='--')  # линия по оси y
plt.grid(color = 'gray', linestyle = '--', linewidth = 0.5)  # сетка
plt.legend()  # легенда

# отображение графика
plt.show()

Полезные ссылки

Задание

Общее задание

  1. Используя данные из второй лабораторной работы, считать изображение или аудио из файла.
  2. Вывести размер изображения или аудио.
  3. Выполнить преобразование из вашего варианта над картинкой или аудиофайлом.
  4. Использовать matplotlib для демонстрации исходного изображения или аудио и результата.
  5. Сохранить результат в новый файл.

Путь к исходному файлу, путь для сохранения, параметры по варианту (если есть) необходимо передавать через аргументы командной строки.

Варианты

  1. Обрежьте изображения до заданных размеров, начиная от левого верхнего угла.

  2. Измените размер изображения на заданный.

  3. Соедините (состыкуйте) два изображения.

  4. Поверните изображение на заданный угол.

  5. Инвертируйте цвета в изображении.

  6. Сделайте изображение полутоновым.

  7. Сделайте изображение бинарным.

  8. Поменяйте местами каналы изображения.

  9. Отразите изображение.

  10. Наложите одно изображение на другое, сделав накладываемое полупрозрачным.

  11. Сделайте из изображения паззл (разделите на n равных частей и заново сложите случайным образом в изображение такого же размера).

  12. Наложите на изображение белый шум.

  13. Наложите на изображение рамку (нарисовать самостоятельно или использовать изображение).

  14. Сделайте изображение круглым (область вне круга должна быть чёрной, белой или прозрачной).

  15. Добавьте эффект градиента (изображение с одной из сторон постепенно становится светлее).

  16. Преобразуйте изображение в пиксель-арт (размер изображения сохранить).

  17. Уменьшите амплитуду сэмплов аудиофайла на заданную величину.

  18. Увеличьте амплитуду сэмплов аудиофайла на заданную величину.

  19. Обрежьте длину аудио в заданном диапазоне.

  20. Склейте два аудиофайла.

  21. Переверните аудио задом наперед.

  22. Сделайте фильтр тишины (удалите участки тише заданного порога).

  23. Смешайте два аудиофайла.

  24. Сделайте эхо-эффект (с помощью наложения с задержкой).

  25. Увеличьте скорость аудиофайла в заданное количество раз.

  26. Уменьшите скорость аудиофайла в заданное количество раз.

  27. Добавьте в аудио белый шум.

  28. Уменьшите амплитуду выше заданной до порогового значения.

  29. Сделайте сглаживание (усреднение значений) аудио с помощью numpy.convolve.

  30. Усильте высокие частоты (чтобы выделить высокие частоты, необходимо из обычной версии аудио вычесть сглаженную).