Анализ и обработка изображений. Знакомство с библиотекой OpenCV

1.

Тема 1. Анализ и обработка
изображений
Знакомство с библиотекой OpenCV

2.

Что такое OpenCV?
OpenCV (Open Source Computer Vision Library) — это
открытая библиотека для работы с алгоритмами
компьютерного зрения, машинным обучением и
обработкой изображений.
Написана на C++
Python
JavaScript
Ruby
других языков
программирования.

3.

Где используется OpenCV?
OpenCV может использоваться везде, где нужно
компьютерное зрение. Эта отрасль IT работает с
технологиями, которые позволяют устройству «увидеть»,
распознать и описать изображение. Компьютерное зрение
дает точную информацию о том, что изображено на
картинке, с описанием, характеристиками и размерами (с
определенной степенью достоверности).
Также библиотека работает с машинным обучением —
отраслью, которая обучает алгоритмы действовать тем или
иным образом.

4.

робототехнике — для
ориентирования робота в
пространстве, распознавания
объектов и взаимодействия с
ними
мобильной фотографии —
для создания бьютифильтров, изменяющих лицо
приложений
медицинских технологиях —
для создания точных методов
диагностики, например 3Dвизуализации органа при МРТ
OPEN CV
промышленных
технологиях — для
автоматизированного
контроля качества, считывания
этикеток, сортировки
продуктов и пр.;
на транспорте — для
разработки автопилотов.
безопасности — для создания
«умных» камер
видеонаблюдения, которые
реагируют на подозрительные
действия, для считывания и
распознавания биометрии

5.

Работа с
видеороликами
Распознавание
объектов
Рисование поверх
изображения
Добавление эффектов
Видоизменение
изображений
Работа со структурами
данных
А что же он может делать или
функциональные возможности
OpenCV

6.

Из чего состоит OpenCV
хранения
математических
функций и
вычислений, алгебры
и структур данных;
распознавания
примитивов;
хранения моделей для
машинного обучения;
ввода и вывода
картинок или видео,
чтения и записи в
файл;
обработки
изображения;
детектирования
объектов — лиц,
предметов и других;
отслеживания и
анализа движений на
видео;
обработки
трехмерной
информации;
ускорения работы
библиотеки;
хранения устаревшего
или еще не готового
кода и других.

7.

Преимущества OpenCV
Активное
сообщество
Это полезно и для
новичков, и для
экспертов. Докуме
нтация по OpenCV
представлена на
нескольких
языках.
Бесплатный доступ
Бесплатной
лицензии. У
библиотеки
открытый
исходный код.
Обилие
алгоритмов
OpenCV включает
более 2500
инструментов и
алгоритмов
компьютерного
зрения и
машинного
обучения.
Высокая скорость
Библиотека
работает быстрее
масштабного и
тяжелого ПО для
математических
вычислений,
Возможность
работы в реальном
времени
Благодаря высокой
скорости и
кроссплатформенно
сти OpenCV
подходит для
работы с
изображениями в
режиме реального
времени.

8.

Недостатки OpenCV
Сложность в
освоении
нужно знать теории
компьютерного зрения и
машинного обучения.
Поэтому порог входа в
отрасль выше, чем в других
популярных направлениях IT.
Отсутствие кодов
обработки ошибок
Если возникла ошибка, в
OpenCV бывает сложно
понять, где именно. Поэтому
при отладке программ у
новичков могут быть
проблемы.
Ориентированность
на большие
платформы
OpenCV работает на
масштабных платформах.
Если запустить ее на
микроконтроллере,
одноплатном компьютере,
производительность будет
невысокой.

9.

Тема 1. Анализ и обработка
изображений
1.Трансформация изображения
Под трансформацией понимается любое его
преобразование. Перемещение, вращение и
масштабирование растра выполняется для того,
чтобы «привязать» растр к координатам проекта.

10.

Возможна трансформация..?
Изменение
размеров
изображения
Добавление
изображения на
изображения
Обрезка
изображения
Изменение
четкости
изображения
Поворот
изображения
Масштабирование
изображения

11.

Трансформация изображения

12.

Трансформация изображения
Round 1.
Перенос изображения
Трансляция изображения — это
прямолинейное перемещение изображения
из одного места в другое, поэтому
перемещение объекта называется
трансляцией. Матрица, показанная ниже,
используется для перевода изображения
Значение b x определяет, насколько изображение будет перемещено по оси x, а
значение b y определяет перемещение изображения по оси y:

13.

Трансформация изображения
Round 1.
Перенос изображения
cv2.warpPerspective:
принимает в качестве
входных данных
матрицу
преобразования (3x3) .
cv2.warpAffine:
принимает на вход
матрицу
преобразования (2x3) .
Обе функции принимают три входных параметра: Входное изображение, матрица
трансформации, кортеж высоты и ширины изображения.

14.

Трансформация изображения
Round 1.
Перенос изображения
import numpy as np
import cv2
import matplotlib.pyplot as plt
# read the input image
img = cv2.imread("city.jpg")
# convert from BGR to RGB so we can
plot using matplotlib
img = cv2.cvtColor(img,
cv2.COLOR_BGR2RGB)
# disable x & y axis
plt.axis('off')
# show the image
plt.imshow(img)
plt.show()
# get the image shape
rows, cols, dim = img.shape
# transformation matrix for translation
M = np.float32([[1, 0, 50],
[0, 1, 50],
[0, 0, 1]])
# apply a perspective transformation to the
image
translated_img = cv2.warpPerspective(img,
M, (cols, rows))
# disable x & y axis
plt.axis('off')
# show the resulting image
plt.imshow(translated_img)
plt.show()
# save the resulting image to disk
plt.imsave("city_translated.jpg",
translated_img)

15.

Трансформация изображения
Round 1.
Перенос изображения
Обратите внимание, что мы используем plt.axis('off'), поскольку не хотим
выводить значения осей, и показываем изображение с помощью imshow()функции
matplotlib.
Мы также используем plt.imsave()функцию для локального сохранения
изображения.
Было
Стало

16.

Трансформация изображения
Round 2.
Масштабирование изображения
Масштабирование изображения — это
процесс изменения размера цифрового
изображения . В OpenCV есть встроенная
функция cv2.resize(), но
преобразование мы будем выполнять с
помощью умножения матриц, как и
раньше. Матрица, используемая для
масштабирования, показана ниже:
S x и S y — коэффициенты масштабирования
для осей x и y соответственно.

17.

Трансформация изображения
Round 2.
Масштабирование изображения
import numpy as np
import cv2
import matplotlib.pyplot as plt
rows, cols, dim = img.shape
#transformation matrix for Scaling
M = np.float32([[1.5, 0 , 0],
[0, 1.8, 0],
# read the input image
[0, 0, 1]])
img = cv2.imread("city.jpg")
# apply a perspective transformation to the
# convert from BGR to RGB so we can plot
image
using matplotlib
scaled_img =
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) cv2.warpPerspective(img,M,(cols*2,rows*2))
# disable x & y axis
# disable x & y axis
plt.axis('off')
plt.axis('off')
# show the image
# show the resulting image
plt.imshow(img)
plt.imshow(scaled_img)
plt.show()
plt.show()
# get the image shape
# save the resulting image to disk
plt.imsave("city_scaled.jpg", scaled_img)

18.

Трансформация изображения
Round 2.
Масштабирование изображения
На что-то это
похоже…
Масштаб вашей картинки изменился, но исходный
размер файла нет)))
Это похоже на смещение картинки где в остатке
смещенной области появлялось черное пятно.
Естествна это можно обрезать

19.

Трансформация изображения
Round 3.
Сдвиг изображения
Отображение сдвига — это линейная карта, которая смещает
каждую точку в фиксированном направлении. Она заменяет
каждую точку по горизонтали или вертикали определенным
значением, пропорциональным ее координатам x или y.
Существует два типа эффектов сдвига.

20.

Трансформация изображения
Round 3.
Сдвиг изображения
Сдвиг в
направлении оси X
Когда сдвиг выполняется в направлении оси X, границы
изображения, параллельные оси X, сохраняют свое положение, а
края, параллельные оси Y, меняют свое место в зависимости от
коэффициента сдвига

21.

Трансформация изображения
Round 3.
Сдвиг изображения
Сдвиг в
направлении оси Y
Первая матрица — это
сдвиг, примененный к
оси X. Если вам нужна
ось Y,
закомментируйте
первую матрицу и
раскомментируйте
вторую.
Когда сдвиг выполняется в направлении оси Y, границы
изображения, параллельные оси Y, сохраняют свое положение, а
края, параллельные оси X, меняют свое место в зависимости от
коэффициента сдвига.

22.

Трансформация изображения
Round 3.
Сдвиг изображения
# read the input image
img = cv2.imread("city.jpg")
# convert from BGR to RGB so we can
plot using matplotlib
img = cv2.cvtColor(img,
cv2.COLOR_BGR2RGB)
# disable x & y axis
plt.axis('off')
# show the image
plt.imshow(img)
plt.show()
# get the image shape
rows, cols, dim = img.shape
# transformation matrix for Shearing
M = np.float32([[1, 0.5, 0],
[0, 1 , 0],
[0, 0 , 1]])
# shearing applied to y-axis
# M = np.float32([[1, 0, 0],
#
[0.5, 1, 0],
#
[0, 0, 1]])
# apply a perspective transformation to the
image
sheared_img =
cv2.warpPerspective(img,M,(int(cols*1.5),int(
rows*1.5)))
# disable x & y axis
plt.axis('off')
# show the resulting image
plt.imshow(sheared_img)
plt.show()
# save the resulting image to disk
plt.imsave("city_sheared.jpg", sheared_img)

23.

Трансформация изображения
Round 3.
Сдвиг изображения
Изображение по оси X:
*P.S. помогает в определение лиц …
Изображение по оси Y:

24.

Трансформация изображения
Round 4.
Отражение изображения
Отражение изображения (или зеркальное
отображение) полезно для переворачивания
изображения. Оно может переворачивать
изображение как по вертикали, так и по горизонтали,
что является частным случаем масштабирования. Для
отражения по оси X мы устанавливаем
значение Sy равным -1, а Sx равным 1, и наоборот для
отражения по оси Y.

25.

Трансформация изображения
Round 4.
Отражение изображения
# read the input image
img = cv2.imread("city.jpg")
# convert from BGR to RGB so we can plot
using matplotlib
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# disable x & y axis
plt.axis('off')
# show the image
plt.imshow(img)
plt.show()
# get the image shape
rows, cols, dim = img.shape
# transformation matrix for x-axis reflection
M = np.float32([[1, 0, 0 ],
[0, -1, rows],
[0, 0, 1 ]])
# transformation matrix for y-axis reflection
# M = np.float32([[-1, 0, cols],
#
[ 0, 1, 0 ],
#
[ 0, 0, 1 ]])
# apply a perspective transformation to the
image
reflected_img =
cv2.warpPerspective(img,M,(int(cols),int(rows)
))
# disable x & y axis
plt.axis('off')
# show the resulting image
plt.imshow(reflected_img)
plt.show()
# save the resulting image to disk
plt.imsave("city_reflected.jpg", reflected_img)

26.

Трансформация изображения
Round 4.
Отражение изображения
Изображение по оси X:
Изображение по оси Y:
Как и раньше, это будет отражать ось X. Если вы хотите отражение по оси Y,
раскомментируйте вторую матрицу и прокомментируйте первую.

27.

Трансформация изображения
Round 5.
Поворот изображения
Вращение — математическое понятие, представляющее собой
движение определенного пространства, сохраняющее хотя бы одну
точку. Поворот изображений — это обычная процедура обработки
изображений, используемая в приложениях для сопоставления,
где алгоритмов
тета ( θ ) — угол на
поворота
выравнивания и других
основе изображений. Она
также широко используется в дополнении данных, особенно когда
речь идет о классификации изображений.
P.S где тета ( θ ) — угол поворота

28.

Трансформация изображения
Round 5.
Поворот изображения
# read the input image
img = cv2.imread("city.jpg")
# convert from BGR to RGB so we can plot
using matplotlib
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# disable x & y axis
plt.axis('off')
# show the image
plt.imshow(img)
plt.show()
# get the image shape
rows, cols, dim = img.shape
#angle from degree to radian
angle = np.radians(10)
#transformation matrix for Rotation
M = np.float32([[np.cos(angle), (np.sin(angle)), 0],
[np.sin(angle), np.cos(angle), 0],
[0, 0, 1]])
# apply a perspective transformation to the
image
rotated_img = cv2.warpPerspective(img, M,
(int(cols),int(rows)))
# disable x & y axis
plt.axis('off')
# show the resulting image
plt.imshow(rotated_img)
plt.show()
# save the resulting image to disk
plt.imsave("city_rotated.jpg", rotated_img)

29.

Трансформация изображения
Round 5.
Поворот изображения
Поворот изображения
P.S. Применяется в выполнении
обнаружение краев в Python с
помощью OpenCV.
Обнаружение краев

30.

Трансформация изображения
Round 6.
Обрезка изображения
Обрезка изображения — это
удаление нежелательных внешних
областей из изображения. Во
многих приведенных выше
примерах присутствуют черные
пиксели, их можно легко удалить с
помощью обрезки.

31.

Трансформация изображения
Round 6.
Обрезка изображения
import numpy as np
import cv2
import matplotlib.pyplot as plt
# read the input image
img = cv2.imread("city.jpg")
# convert from BGR to RGB so we can plot
using matplotlib
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# disable x & y axis
plt.axis('off')
# show the image
plt.imshow(img)
plt.show()
# get 200 pixels from 100 to 300 on both x-axis
& y-axis
# change that if you will, just make sure you
don't exceed cols & rows
cropped_img = img[100:300, 100:300]
# disable x & y axis
plt.axis('off')
# show the resulting image
plt.imshow(cropped_img)
plt.show()
# save the resulting image to disk
plt.imsave("city_cropped.jpg", cropped_img)

32.

Трансформация изображения
Round 6.
Обрезка изображения
Поскольку OpenCV загружает изображение как массив numpy, мы
можем обрезать изображение, просто проиндексировав массив, в
нашем случае мы решили получить 200 пикселей от 100 до 300 по
обеим осям, вот выходное изображение:

33.

Трансформация изображения
Final Round.
Задание.
• Загрузите изображение
• Покажите изображение
• Перенесите изображение на рандомные координаты. После
чего отобразите результат( или сохраните новую картинку)
• Увеличите масштаб картинки( используя свой возраст как
коэффициент масштабирования(сохраните картинку)
• Произведите сдвиг изображения по оси Y на текущее
количество минут(сохраните изображение)
• Отзеркальте изображение по любой из осей(сохраните)
• Обрежьте изображение(сохраните результат)
• Поверните изображение на ваш возраст умноженное на
3.(сохраните изображение)

34.

Тема 1. Анализ и обработка
изображений
2.Изменение значений компонентов цвета

35.

Что по цвету?
Цвет — качественная субъективная
характеристика электромагнитного излучения
оптического диапазона, определяемая на
основании возникающего физиологического
зрительного ощущения и зависящая от ряда
физических, физиологических и психологических
факторов.

36.

Изменение значений компонентов цвета
Цветовая модель — это модель представления
цвета каждой точки с помощью группы чисел.
Некий цветовой код.
красный,
синий
зеленый
RGB
цветовой тон
—H
яркость —
V
насыщение
—S
HSV

37.

Изменение значений компонентов цвета
BGR — стандартное цветовое пространство OpenCV (используется по умолчанию). Является аналогом RGB
пространства, но с другим порядком компонентов.
RGB — в данном методе отображения цвета мы раскладываем каждый пиксель на составляющие в
виде красной (red), зеленой (green) и голубой (blue) компоненты.
HSV — это отображение создано для упрощения представление цвета человеком. Люди в случае описания
цвета редко пользуются компонентами цвета, обычно они применяют такие слова как оттенок
(hue), насыщенность (saturation) и интенсивность (value) цвета.
XYZ — модель была выведена в лаборатории CIE. Задача состояла в описании всех цветов, которые может
видеть глаз человека. Компоненты X, Y, Z в данной модели описывают чувствительность
среднестатистического наблюдателя к стандартным возбуждениям.
GRAY — черно-белое пространство, где яркость рассчитывается как средняя яркость всех трех компонент
модели BGR.
YUV — данная схема пришла из телевидения, где компонента Y – значение яркости, а UV – двух
цветоразностных сигналов.

38.

Изменение значений компонентов цвета

39.

Изменение значений компонентов цвета
Кто такой этот ваш RGB? Рэпер что ли?

40.

Изменение значений компонентов цвета
Кто такой этот ваш RGB? Рэпер что ли?

41.

Изменение значений компонентов цвета
Кто такой этот ваш CMYK? Битмэйкер?

42.

Изменение значений компонентов цвета
Кто такой этот ваш CMYK? Битмэйкер?

43.

Изменение значений компонентов цвета
Перевод
img = cv.cvtColor(img,cv.COLOR_BGR2RGB)
Функция img = cv.cvtColor() принимает на
вход изменяемое изображение и
«направление» для перехода:
cv.COLOR_BGR2RGB. Первым указывается
текущий «формат представления» (BGR),
далее символ «2» (созвучно с английским
«to», которое интерпретируется как русское
«в») после конечный «формат
представления». Получается, что мы вводим
команду перевести формат BGR в RGB.

44.

Изменение значений компонентов цвета
import sys
import numpy as np
import cv2 as cv
fn = "KOT.jpg" # путь к файлу с картинкой
img = cv.imread(fn) # загрузка изображения
img = cv.cvtColor(img,cv.COLOR_BGR2RGB)
cv.imshow('KOT', img) # выводим итоговое
изображение в окно
cv.waitKey() # окно изображения открыто пока не
нажмем какую-нибудь клавишу
cv.destroyAllWindows()

45.

Изменение значений компонентов цвета
После выполнения получаем:
Было
Стало
BGR
RGB

46.

Изменение значений компонентов цвета
Изображение по порогу (бинаризация)
Для анализа изображений
проще всего использовать
двухцветное (черно-белое)
изображение.
import sys
import numpy as np
import cv2 as cv
fn = "KOT.jpg" # путь к файлу с картинкой
img = cv.imread(fn)
img =
cv.cvtColor(img,cv.COLOR_BGR2GRAY)
ret, img = cv.threshold(img, 127, 255, 0)
cv.imshow('KOT', img) # выводим
итоговое изображение в окно
cv.waitKey()
cv.destroyAllWindows()
img=cv.cvtColor(img,cv.COLOR_BGR2GRAY) ret, img = cv.threshold(img, 127, 255, 0)

47.

Изменение значений компонентов цвета

48.

Изменение значений компонентов цвета
Разложение по каналам BGR

49.

Изменение значений компонентов цвета
color_spaces = ('RGB','GRAY','HSV','LAB','XYZ','YUV')
color_images = {color : cv2.cvtColor(image_bgr,
getattr(cv2,'COLOR_BGR2' + color))
for color in color_spaces}
for color in color_images:
cv2.imshow(color, color_images[color])
cv2.waitKey(0)
RGB, GRAY, YUV,
LAB, HSV, XYZ в
BGR

50.

Тема 1. Анализ и обработка
изображений
3. Применение фильтров

51.

3. Применение фильтров
Фильтр в OpenCV - это операция обработки
изображений, которая применяется к пикселям
изображения для изменения их значений в
соответствии с определенным алгоритмом

52.

3. Применение фильтров
А куда,где и откуда эти ваши фильтры?
Фильтры в OpenCV могут быть применены к:
целое изображение
определенная область изображения
Они работают путем применения математических операций или
статистических методов к пикселям изображения или их
окрестностям.

53.

3. Применение фильтров
Виды царства фильтровых…
Фильтры
размытия (Blur)
Фильтры
шумоподавления
Фильтры
резкости
(Sharpening)
Фильтры
цветового
пространства
Фильтры границ
(Edge Detection)
Фильтры
изменения
яркости и
контрастности
English     Русский Правила