878.20K
Категория: ИнформатикаИнформатика

Введение в информационные технологии и программирование. Практическая работа 1

1.

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ
КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное
учреждение высшего образования
«Московский технический университет связи и информатики» (МТУСИ).
Кафедра «Телевидения и звукового вещания имени С. И. Катаева»
Введение в информационные технологии и программирование
Практическая работа 1
«Работа с графикой»

2.

Применяемые
модули
• from skimage import
io, data, feature
Имя подмодуля
Реализуйте функцию
io
Читайте, сохраняйте и отображайте изображения и видео
color
Преобразование цветового пространства
data
Предоставьте несколько тестовых изображений и образцы данных
filters
Улучшение изображения, обнаружение краев, фильтр сортировки,
автоматический порог и т. Д.
draw
Основные операции рисования графики на множественных массивах,
включая линии, матрицы, круги, текст и т. Д.
transform
Геометрическое преобразование и другие преобразования, такие как
вращение, растяжение, преобразование Радона и т. Д.
exposure
Регулировка интенсивности изображения, например, выравнивание
гистограммы и т. Д.
feature
Обнаружение и извлечение признаков, например, анализ текстуры и т. Д.
graph
Операции теории графов, например кратчайший путь
measure
Измерение атрибутов изображения, например, сходства и контура
morphology
Морфологические операции, такие как операции открытия и закрытия,
извлечение скелета и т. Д.
novice
Упрощенный интерфейс для учебных целей
restoration
Алгоритм восстановления, такой как алгоритм деконволюции,
шумоподавление и т. Д.
segmentation
Изображение разделено на несколько областей
util
Общие инструменты
viewer
Простой графический пользовательский интерфейс для визуализации
результатов и изучения параметров

3.

Чтение и отображение изображений
skimage.io.imread(fname) - прочитает картинку.
fname – путь до картинки
skimage.io.imshow(arr) - Средство для отображения картинки.
arr – массив полученный после прочтения картинки
from skimage import io
img = io.imread('./cat.png')
io.imshow(img)
io.show()

4.

Cохранить изображение
io.imsave(fname, arr) - Функция сохранения.
fname: указывает сохраненный путь и имя
arr: указывает переменную массива, которую необходимо сохранить
from skimage import io, data
img = data.checkerboard()
io.imshow(img)
io.imsave('checkerboard_copy.jpg', img)
Таким образом, файл checkerboard_copy.jpg добавляется в
текущий рабочий каталог.
Примечание: Сохранение изображения также играет роль
преобразования формата.
Если изображение читается в формате png, при сохранении как
jpg изображение будет преобразовано из формата png в
изображение формата jpg.

5.

Тестовые
изображения
skimage
from skimage import io, data
img = data.hubble_deep_field()
io.imshow(img)
io.show()
Имя изображения - это имя
соответствующей функции,
например имя функции,
соответствующее изображению с
камеры. data.camera()
Название изображения
Описание
astronaut
космонавт
binary_blobs
Бинарные пятна
camera
камера
checkerboard
шахматная доска
chelsea
Кошка
clock
Часы
coffee
чашка кофе
coins
монета
horse
лошадь
hubble_deep_field
Звездное небо
immunohistochemistry
Изображение толстой кишки
logo
торговая марка
moon
Лунная поверхность
page
Содержание страницы
rocket
ракета
text
Текстовое изображение

6.

Тестовые изображения skimage
Примечание: эти изображения хранятся в каталоге установки
skimage, и путь можно распечатать через data_dir.
from skimage import data_dir
print (data_dir)
/usr/local/lib/python3.6/dist-packages/skimage/data

7.

Изменение при открытии в черно-белое
изображение
При чтении одного изображения в градациях серого
используйте
skimage.io.imread(fname,
as_grey=True)
Функция,
первый
параметр
fname
представляет путь к изображению, которое будет
отображаться, а второй параметр as_grey имеет тип bool, а
значение по умолчанию - False.
from skimage import io
img = io.imread('./cat.png', as_grey=True)
io.imshow(img)
io.show()

8.

Получить информацию об изображении
from skimage import io, data
img = data.chelsea()
io.imshow(img)
io.show()
print(type(img))
# Виды
print(img.shape)
# Форма
print(img.shape[0])
# Ширина изображения
print(img.shape[1])
# Высота изображения
print(img.shape[2])
# Номер канала изображения
print(img.size)
# Отображаем общее количество пикселей
print(img.max())
# Максимальное значение пикселя
print(img.min())
# Минимальное значение пикселя
print(img.mean())
# Среднее значение в пикселях

9.

Доступ к пикселям изображения и
обрезка
img[i, j, c] - Метод доступа к пикселям цветного изображения
i - строка на картинке
j - столбец на картинке
c - канал изображения (три канала RGB соответствуют 0, 1, 2
соответственно).
gray[i, j] - Метод доступа к пикселям цветного изображения
i - строка на картинке
j - столбец на картинке
Координаты начинаются с верхнего левого угла.

10.

Доступ к пикселям изображения и
обрезка
Например, для значения пикселя 20-й
строки и 10-го столбца в канале B
изображения космонавта в данных
from skimage import io, data
img = data.astronaut()
pixel = img[20, 10, 2]
print(pixel)
Вывод: 69
Например, программа для вывода красного одноканального
изображения выглядит следующим образом
from skimage import io, data
img = data.astronaut()
R = img[:, :, 0]
io.imshow(R)
io.show()
Результат:

11.

Модификация пикселей
from skimage import io, data
import numpy as np
img = data.astronaut()
# Случайно генерировать 5000 очков соли и перца
rows, cols, dims = img.shape
for i in range(5000):
x = np.random.randint(0, rows)
y = np.random.randint(0, cols)
img[x, y, :] = 255
io.imshow(img)
io.show()
Здесь random in numpy используется для генерации случайных чисел.
Randint (0, cols) означает случайное генерирование целого числа в
диапазоне от 0 до cols.

12.

Обрезка изображения
Поскольку изображение хранится в
массиве numpy, обрезка массива - это
обрезка изображения
Например,
обрезать
картинку
космонавта
from skimage import io, data
img = data.astronaut()
partial_img = img[50:150, 170:270,
:]
io.imshow(partial_img)
io.show()

13.

Обрезка изображения
При работе с несколькими пикселями используйте метод нарезки
массива для доступа, а метод нарезки обращается к пикселям,
соответствующим индексам в указанном интервале.
img[i,:] = im[j,:] # Присваиваем значение j-й строки i-й строке
img[:,i] = 100 # Установить все значения в столбце i на 100
img[:100,:50].sum() # Вычислить сумму всех значений в первых 100 строках и 50 столбцах
img[50:100,50:100] # 50 ~ 100 строк, 50 ~ 100 столбцов (исключая 100-ю строку и 100-й
столбец)
img[i].mean() # Среднее значение всех значений в строке i
img[:,-1] # последняя строка
img[-2,:] (or im[-2]) # Предпоследняя строка

14.

Типы данных в изображении
Диапазон значений пикселей изображения составляет
[0,255], поэтому тип по умолчанию - unit8, вы можете
использовать следующий код для просмотра типа данных:
from skimage import io, data
img = data.astronaut()
print(Img.dtype.name)
После преобразования цветного изображения в оттенки
серого его тип изменяется с unit8 на float.

15.

Цветовое пространство и
преобразование
• skimage.color.rgb2grey(rgb)
• skimage.color.rgb2hsv(rgb)
• skimage.color.rgb2lab(rgb)
• skimage.color.gray2rgb(image)
• skimage.color.hsv2rgb(hsv)
• skimage.color.lab2rgb(lab)
Фактически, все перечисленные выше функции преобразования можно заменить функцией
• skimage.color.convert_colorspace(arr, fromspace, tospace)
• Представляет преобразование arr из цветового пространства fromspace в цветовое
пространство tospace.
В функции преобразования цветового пространства цветового модуля есть более полезная
функция:
• skimage.color.label2rgb(arr), может раскрашивать изображение в соответствии со значением
метки.
Эту функцию можно использовать для раскрашивания будущих картинок после классификации.

16.

Цветовое пространство и
преобразование
• skimage.color.rgb2grey(rgb)
используемые цветовые пространства

• skimage.color.rgb2hsv(rgb)
• Оттенки серого (черно-белое),
• skimage.color.rgb2lab(rgb)
• пространство RGB,
• skimage.color.gray2rgb(image)
• skimage.color.hsv2rgb(hsv)
• пространство HSV,
• skimage.color.lab2rgb(lab)
• пространство cmyk.
• Фактически, все перечисленные
можно заменить функцией
• skimage.color.convert_colorspace
После преобразования цветового пространства
тип
• Представляет преобразование
изображения становится плавающим.
fromspace в цветовое пространс

17.

Цветовое пространство и
преобразование
• RGB в оттенки серого
from skimage import io,data,color
img=data.camera()
gray=color.rgb2gray(img)
io.imshow(gray)
io.show()
RGB в HSV
from skimage import io,data,color
img = data.coffee()
hsv = color.convert_colorspace(img, 'RGB', 'HSV’)
io.imshow(hsv)
io.show()

18.

Пример 1.
Бинаризуйте изображение космонавта,
если значение пикселя больше 128, оно
станет 1, в противном случае оно станет 0
from skimage import io, data, color
img = data.astronaut() img_gray = color.rgb2gray(img)
rows, cols = img_gray.shape
for i in range(rows):
for j in range(cols):
if (img_gray[i, j] <= 0.5):
img_gray[i, j] = 0
else:
img_gray[i, j] = 1
io.imshow(img_gray)
io.show()

19.

Пример 2:
Используйте функцию rgb2gray () цветового модуля для
преобразования цветного трехканального изображения в
изображение в градациях серого, и результатом
преобразования является массив типа float64 с диапазоном
между [0,1]
from skimage import io, data
img = data.astronaut()
img_idx_modified = img[:, :, 0] > 170
print(img_idx_modified)
img[img_idx_modified] = [0, 255, 0]
io.imshow(img)
io.show()
В этом примере сначала оцениваются все значения
пикселей канала R. Если оно больше 170, значение
пикселя этого места изменяется на [0,255,0], то есть
значение канала G равно 255, а значения каналов R и
B равны 0.

20.

Пример:
разделите изображения кофе на три категории, а затем раскрасьте
три категории цветами по умолчанию.
from skimage import io,data,color
import numpy as np
img=data.coffee()
gray=color.rgb2gray(img)
rows,cols=gray.shape
labels=np.zeros([rows,cols])
for i in range(rows):
for j in range(cols):
if(gray[i,j]<0.4):
labels[i,j]=0
elif(gray[i,j]<0.75):
labels[i,j]=1
else:
dst=color.label2rgb(labels)
io.imshow(dst)
io.show()
labels[i,j]=2
English     Русский Правила