Основа работы с изображениями
Автор: Данила Ермаков • Май 18, 2023 • Лабораторная работа • 523 Слов (3 Страниц) • 109 Просмотры
Инженерная школа информационных технологий и робототехники
Направление 09.04.01 «Информатика и вычислительная техника»
Отделение информационных технологий
Лабораторная работа 1:
Основа работы с изображениями
по дисциплине: Машинное обучение
Выполнил: студент гр. 8ВМ11 ____________ Ермаков Д.Д.[pic 1]
(Номер группы) (Подпись) (Ф.И.О.)
Проверил: доцент ОИТ ___________ Друки А.А.
(Подпись) (Ф.И.О.)
[pic 2]
Цель работы
Получить навыки работы с изображениями в платформе Google Colab на примере выделения границ на изображении.
Задание
1. Получение навыков работы с Google Colab и веб-оболочкой iPython Notebooks;
2. Получение навыков обработки изображений;
3. Применение оператора Собеля для решения задачи выделения границ на изображении.
Ход работы
Создадим новый блокнот в Google Colab и импортируем исходное изображение.
Подключим необходимые для работы с изображениями библиотеки:
from PIL import Image import matplotlib.pyplot as plt |
Загрузим исходное изображение и отобразим его (рис. 1).
from google.colab import drive drive.mount('/content/drive') img_original = Image.open( r"./drive/My Drive/ML/spaniel.jpg") plt.imshow(img_original) |
[pic 3]
Рисунок 1 – Исходное изображение
Импортируем библиотеку numpy:
import numpy as np |
Преобразуем исходное изображение в numpy-массив:
img_np = np.array(img_original) |
Преобразуем изображение в градации серого, используя стандарт ITU-R BT.709. Формула преобразования:
[pic 4]
Формула преобразования представляет скалярное произведение вектора коэффициентов на вектор, элементами которого являются цвета пикселя. Выполним преобразование и отобразим полученное изображение (рис. 2):
bt709_koeff = [0.229, 0.587, 0.114] img_gray_bt709 = np.dot(img_np[...,:3], bt709_koeff) plt.imshow(img_gray_bt709, cmap='gray') |
[pic 5]
Рисунок 2 – Изображение в градациях серого
Определим функцию, выполняющую операцию свёртки:
def convultion3x3(input_image, kernel): result = np.zeros(input_image.shape) for row in range(1, len(result)-1): for col in range(1, len(result[0])-1): input_segment = input_image[row-1:row+2, col-1:col+2] result[row, col] = np.abs(np.sum(input_segment * kernel)) return result |
...