Эта статья была опубликована в рамках Блогатон по Data Science
Введение
Внутри изображения может быть много информации, и мы можем интерпретировать ее по-разному и с разных точек зрения. Итак, что такое изображение и как с ним работать? Проще говоря, мы можем сказать, что изображение - это визуальное представление чего-либо, и с ним можно легко справиться с помощью компьютерного зрения (с точки зрения машинного обучения). А как насчет видео? Видео можно описать как запись движущегося набора изображений или непрерывных кадров. Но мы можем разобраться с видео с использованием компьютерного зрения в другом блоге! 🙂
Некоторые из вас, возможно, уже знают о компьютерном зрении и могут пропустить этот абзац, но для тех, кто не имеет представления об этом, компьютерное зрение, в основном известное в сокращенной форме `` резюме '', можно было бы назвать полем в Искусственный интеллект, который извлекает полезную информацию практически из всех областей современной эпохи, включая медицину, автомобилестроение, производство, сельское хозяйство и т. Д.
изображение 1
Как человек, который в настоящее время читает этот пост, вы сможете различать вещи или элементы, присутствующие на изображении. Но как насчет машин? Могли ли они увидеть и подумать, чтобы различить его самостоятельно? НЕТ? тогда давайте заставим вашу машину делать это.
В этом блоге вы познакомитесь с основами компьютерного зрения с использованием Python.
Я считаю, что вы уже установили Python Shell / Jupyter Notebook / PyCharm или Visual Studio Code (и это лишь некоторые из них) для программирования на Python. Давайте для начала установим широко используемый пакет (OpenCV), и мы собираемся запускать коды в каждой ячейке в Jupyter Notebook.
Установка пакета OpenCV для предварительной обработки изображений
OpenCV - это предварительно созданная библиотека (пакет) только для ЦП с открытым исходным кодом, которая широко используется для приложений компьютерного зрения, машинного обучения и обработки изображений. Он поддерживает множество языков программирования, включая Python.
Установите пакет OpenCV, используя:
pip установить opencv-python
OR
pip установить opencv-contrib-python
Выполните любую из этих команд на своем терминале или, если вы используете Anaconda Navigator - Jupyter Notebook, вы можете изменить «pip» с помощью команды «conda» и установить то же самое.
Импорт пакета
Что такое пакет в Python? Пакет в Python - это набор модулей, содержащих заранее написанные сценарии. Эти пакеты помогают нам импортировать модули целиком или даже по отдельности. Мы можем импортировать пакет, вызвав модуль «cv2» следующим образом:
импорт cv2
Чтение изображения
Цифровые изображения можно разделить на: цветные изображения, полутоновые изображения, двоичные изображения и мультиспектральные изображения. Цветное изображение включает информацию о цвете для каждого пикселя. Изображения, имеющие оттенки серого в качестве единственного цвета, являются изображениями в градациях серого, в то время как двоичное изображение имеет ровно два цвета, в основном черные и белые пиксели. Мультиспектральные изображения - это изображения, которые захватывают данные изображения в диапазоне электромагнитного спектра в пределах определенной длины волны.
Вернемся к части кодирования и прочтем изображение, например, изображение показано ниже:
Это изображение мандрила. В настоящее время я читаю изображение из своего локального каталога.
# cv2.imread (path_to_image_with_file_extension, флаг)
Код использования выглядит так:
img = cv2.imread ("mandrill.jpg", 1)
Здесь мы используем метод imread пакета cv2 для чтения изображения, и первый параметр соответствует пути изображения с его именем файла и расширением, а второй - это флаг, который вы можете установить, который указывает путь, как читать по изображению. Если хотите, вы можете заменить здесь абсолютный путь к изображению и попробовать прочитать его со своего локального компьютера или даже из Интернета! Если изображение присутствует в вашем текущем рабочем каталоге, вам нужно только указать имя изображения с его типом расширения.
Что касается второго параметра, если вы хотите читать его как изображение в градациях серого, вы можете указать для параметра значение 0, -1 для чтения изображения как неизменного (считывает изображение как альфа-канал или канал прозрачности, если он есть) и по умолчанию это 1, как цветное изображение. Вы также можете попробовать другие параметры по этой ссылке:
https://docs.opencv.org/4.5.2/d8/d6a/group__imgcodecs__flags.html#ga61d9b0126a3e57d9277ac48327799c80
под ImreadModes.
Свойства изображения
Форма:
У каждого изображения есть форма. Длину границ, представленных изображением, можно назвать формой, т. Е. Высотой и шириной. Теперь, когда вы знаете, как читать изображение, как насчет того, чтобы проверить форму изображения?
печать (img.shape)
это основной способ распечатать форму изображения, но мы можем извлечь форму, используя:
h, w, c = img.shape print («Размеры изображения: nnHeight:», h, «pixelnWidth:», w, «пикселейnNumber of Channels:», c)
чтобы лучше понять.
Для режима цвета и без изменений он вернет 3 значения, включая высоту, ширину и количество каналов, присутствующих в изображении. Если вы использовали режим оттенков серого, форма будет равна 2, что вернет высоту и ширину изображения, но тогда вам просто нужно использовать только переменные h и w (исключить использование «c»), иначе вы можете получить ошибка значения: «Недостаточно значений для распаковки (ожидалось 3, получено 2)».
Тип:
Мы можем узнать тип изображения, используя метод «type». Использование этого метода помогает нам узнать, как представлены данные изображения. Запустите код следующим образом:
печать (тип (img))
Результат может быть таким:
как тип изображения. Это многомерный контейнер с предметами одного типа и размера. Дополнительную информацию о N-мерном массиве можно найти по следующей ссылке:
https://numpy.org/doc/stable/reference/arrays.ndarray.html
Тип данных только что прочитанного изображения:
Поскольку изображение представляет собой N-мерный массив, мы можем проверить тип данных изображения:
печать (img.dtype)
Значения пикселей изображения:
Мы можем думать об изображении как о наборе небольших образцов. Эти образцы называются пикселями. Для лучшего понимания попробуйте увеличить изображение как можно больше. Мы можем видеть одно и то же, разделенное на разные квадраты. Это пиксели, и когда они объединяются вместе, они образуют изображение.
Один из простых способов представления изображения - это матрица. Мы даже можем создать изображение с помощью матрицы и сохранить его! Я покажу вам, как это сделать позже в этом посте. Взгляните на это изображение ниже:
изображение 2
Эта картинка скорее пример того, как выглядит матричное представление изображения. Слева - изображение Линкольна, посередине значения пикселей помечены числами от 0 до 255, обозначающими их интенсивность или яркость, а справа сами числа в матрице. Каждое значение в матрице соответствует пикселю, который является наименьшим элементом информации, присутствующей в изображении. Проверьте значения пикселей изображения, просто распечатав переменную, в которую вы загрузили изображение!
печать (img)
Разрешение изображения:
Разрешение изображения можно определить как количество пикселей, присутствующих в изображении. Качество изображения повышается при увеличении количества пикселей. Мы видели ранее форму изображения, которая показывает количество строк и столбцов. Это можно сказать как разрешение этого изображения. Некоторые из стандартных разрешений: 320 x 240 пикселей (в основном подходят для устройств с маленьким экраном), 1024 x 768 пикселей (подходят для просмотра на стандартных компьютерных мониторах), 720 x 576 пикселей (подходят для просмотра на телевизорах стандартной четкости). наборы с соотношением сторон 4: 3), 1280 x 720 пикселей (для просмотра на широкоэкранных мониторах), 1280 x 1024 пикселей (хорошо для просмотра в полноэкранном режиме на ЖК-мониторах с соотношением сторон 5: 4), 1920 x 1080 пикселей (для просмотра на HD-телевизорах), и теперь у нас даже есть разрешения 4K, 5K и 8K, которые составляют 3840 x 2160 пикселей, 5120 x 2880 пикселей и 7,680 x 4,320 пикселей, соответственно, поддерживаемые мониторами и телевизорами сверхвысокой четкости.
Когда мы умножаем количество столбцов на количество строк, мы можем получить общее количество пикселей, присутствующих в изображении. Например, в изображении размером 320 x 240 общее количество присутствующих пикселей составляет 76,800 пикселей.
Просмотр изображения
Давайте посмотрим, как отобразить изображение в окне. Для этого мы должны создать окно графического интерфейса пользователя, чтобы отображать изображение на экране. Первым параметром должен быть заголовок экрана окна графического интерфейса пользователя, указанный в строковом формате. Мы можем показать изображение во всплывающем окне с помощью метода cv2.imshow (). Но когда вы пытаетесь закрыть его, вы можете почувствовать себя застрявшим в его окне. Чтобы бороться с этим, мы можем использовать простой метод «waitKey». Попробуйте эту часть кода в новой ячейке:
cv2.imshow ('Mandrill', img) k = cv2.waitKey (0), если k == 27 или k == ord ('q'): cv2.destroyAllWindows ()
Здесь мы указали параметр «0» в «waitKey», чтобы окно оставалось открытым, пока мы его не закроем. (Вы также можете указать время в миллисекундах вместо 0, указав, сколько времени оно должно быть открыто.) После этого мы можем назначить переменную, которая будет действовать для закрытия окна, когда мы нажимаем клавишу «ESC» или клавишу « q '. Метод cv2.destroAllWindows () используется для закрытия или удаления окон графического интерфейса пользователя с экрана / памяти.
Сохранение изображения
Перед сохранением изображения как насчет преобразования изображения в оттенки серого, а затем его сохранения? Преобразуйте изображение в оттенки серого, используя:
серый = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)
Теперь мы можем сохранить изображение:
cv2.imwrite ('Mandrill_grey.jpg', серый)
и проверьте изображение, сохраняемое в текущем рабочем каталоге. Первый параметр соответствует имени файла, в котором должно быть сохранено изображение, а второй параметр - это переменная, которая содержит изображение (информацию о пикселях).
Извлечение битовых плоскостей изображения и их реконструкция
Мы можем разделить изображение на разные уровни битовых плоскостей. Например, разделите изображение на 8-битные (0-7) плоскости, где последние несколько плоскостей содержат большую часть информации для изображения.
изображение 3
Для этого мы можем импортировать еще два пакета:
импортировать matplotlib.pyplot как plt импортировать numpy как np
Если вы получаете сообщение об ошибке при импорте любого из пакетов, вы можете установить их, используя:
conda install -c conda-forge matplotlib conda install -c anaconda numpy
Теперь мы определяем функцию для извлечения каждой из 8-ми уровневых битовых плоскостей изображения.
def extract_bit_plane (cd): # извлечение всех битов по одному # от 1-го до 8-го в переменной # от c1 до c8 соответственно c1 = np.mod (cd, 2) c2 = np.mod (np.floor (cd / 2) , 2) c3 = np.mod (np.floor (cd / 4), 2) c4 = np.mod (np.floor (cd / 8), 2) c5 = np.mod (np.floor (cd / 16 ), 2) c6 = np.mod (np.floor (cd / 32), 2) c7 = np.mod (np.floor (cd / 64), 2) c8 = np.mod (np.floor (cd / 128), 2) # снова объединяем изображение для формирования эквивалента исходному изображению в оттенках серого cc = 2 * (2 * (2 * c8 + c7) + c6) # восстанавливаем изображение с 3 старшими битовыми плоскостями to_plot = [cd, c1, c2 , c3, c4, c5, c6, c7, c8, cc] fig, axes = plt.subplots (nrows = 2, ncols = 5, figsize = (10, 8), subplot_kw = {'xticks': [], ' yticks ': []}) fig.subplots_adjust (hspace = 0.05, wspace = 0.05) для ax, i в zip (axes.flat, to_plot): ax.imshow (i, cmap =' gray ') plt.tight_layout () plt.show () return cc
Теперь мы готовы вызвать функцию.
reconstructed_image = extract_bit_plane (серый)
Мы реконструировали изображение (почти подобное), используя последние три битовых плоскости, то есть шестую, седьмую и восьмую плоскости. И результат выглядит так:
Как насчет того, чтобы создать небольшое изображение самостоятельно? Попробуем прямо сейчас!
Построение небольшого синтетического изображения
Мы можем попытаться создать синтетическое изображение, содержащее четыре концентрических квадрата с четырьмя различными значениями интенсивности пикселей,
40, 80, 160 и 220.
con_img = np.zeros ([256, 256]) con_img [0:32,:] = 40 # верхняя строка con_img [:,: 32] = 40 # левый столбец con_img [:, 224: 256] = 40 # правый столбец con_img [224 :,:] = 40 # нижняя строка con_img [32:64, 32: 224] = 80 # верхняя строка con_img [64: 224, 32:64] = 80 # левый столбец con_img [64: 224, 192: 224] = 80 # правый столбец con_img [192: 224, 32: 224] = 80 # нижняя строка con_img [64:96, 64: 192] = 160 # верхняя строка con_img [96: 192, 64:96] = 160 # левый столбец con_img [96: 192, 160: 192] = 160 # правый столбец con_img [160: 192, 64: 192] = 160 # нижняя строка con_img [96: 160, 96: 160] = 220 plt.imshow (con_img)
Полученное изображение будет выглядеть так:
Мы можем взглянуть на использование различных фильтров и преобразований изображений в другой статье.
Спасибо, что прочитали статью.
изображение 4
Не стесняйтесь добавлять свои предложения под комментариями и делитесь, если вам понравилась эта статья. Полный код программирования Python в Jupyter Notebook, упомянутый в этой статье, доступен в моем репозитории Github:
https://github.com/jissdeodates/Beginner-s-Guide-to-Computer-Vision
Ссылки:
- Изображение 1 - https://seevisionc.blogspot.com/2013/09/computer-vision-is-everywhere.html
- Изображение 2- https://towardsdatascience.com/everything-you-ever-wanted-to-know-about-computer-vision-heres-a-look-why-it-s-so-awesome-e8a58dfb641e
- Image 3- https://nptel.ac.in/content/storage2/courses/117104069/chapter_8/8_13.html
- Изображение 4- https://memegenerator.net/instance/21508026/willy-wonka-oh-so-you-created-a-computer-vision-algorithm-you-must- Never-lose-the-remote
https://docs.opencv.org/4.5.2/d1/dfb/intro.html
https://docs.opencv.org/4.5.2/db/deb/tutorial_display_image.html
Медиа, показанные в этой статье, не принадлежат Analytics Vidhya и используются по усмотрению автора.
Похожие страницы:
- "
- 4k
- 7
- 8k
- Absolute
- сельское хозяйство
- Все
- Альфа
- аналитика
- Приложения
- гайд
- искусственный интеллект
- автомобильный
- Основы
- Немного
- Черный
- Блог
- призывают
- изменение
- каналы
- код
- Кодирование
- Column
- Комментарии
- Компьютерное зрение
- Container
- Текущий
- данным
- сделка
- Устройства
- доменов
- и т.д
- Экстракты
- Фига
- фильтры
- First
- форма
- формат
- Бесплатно
- функция
- GIF
- GitHub
- хорошо
- серый
- Оттенки серого
- инструкция
- здесь
- High
- Как
- How To
- HTTPS
- идея
- изображение
- импортирующий
- В том числе
- информация
- Интеллекта
- IT
- Jupyter Notebook
- Основные
- Языки
- изучение
- уровень
- Библиотека
- Lincoln
- LINK
- локальным
- обучение с помощью машины
- Продукция
- Большинство
- производство
- Медиа
- основным медицинским
- мем
- номера
- открытый
- OpenCV
- Другое
- перспектива
- перспективы
- картина
- Pixel
- Planes
- представить
- нажмите
- FitPartner™
- Программирование
- языки программирования
- Питон
- Reading
- Run
- экономия
- Наука
- экран
- набор
- Поделиться
- просто
- Размер
- небольшой
- So
- и политические лидеры
- Поддержанный
- Поддержка
- говорит
- Основы
- время
- Прозрачность
- tv
- Ультра
- us
- ценностное
- Видео
- Видео
- Вид
- видение
- W
- Что такое
- КТО
- окна
- в
- слова
- X
- зум