Skip to content

kivirciks/colorization

Repository files navigation

Колоризация изображений

Входящие файлы

  • 4140_CV_ЛР1_Строкова_PIL.ipynb - ноутбук с программным кодом на Python, реализация алгоритма через библиотеку Matplotlib;
  • 4140_CV_ЛР1_Строкова_Нативно.ipynb - ноутбук с программным кодом на Python, реализация алгоритма с использованием базовых библиотек;
  • C++ - каталог с программным кодом на C++;
  • Каталог "Изображения" - исходные и итоговые изображения.

    Постановка задачи

    Цель работы: научиться реализовывать один из простых алгоритмов обработки изображений.

    Базовый алгоритм: колоризация.

    Задание: на вход поступает изображение, программа отрисовывает окно, в которое выводится либо исходное изображение после преобразования в черно-белое, либо после колоризации.

    Задачи:
  • реализовать алгоритм с использованием встроенных функций какой-либо библиотеки (Matplotlib);
  • реализовать алгоритм с помощью примитивных операций и циклов на Python;
  • реализовать алгоритм с помощью компилируемого кода (на C++);

    Теоретическая база

    Модель RGB основана на аддитивной комбинации трех основных цветов – красного (Red), зеленого (Green) и синего (Blue). Она описывает системы, основанные на испускании света для получения нужного цвета (телевизоры, мониторы). Сами по себе значения R, G, B не несут физического смысла, нужна привязка к исходному цветовому пространству. В основном методы компьютерного зрения по умолчанию работают именно в формате RGB.

    В большинстве изображений пиксели представлены двумя способами: в оттенках серого и в цветовом пространстве RGB. В изображениях в оттенках серого каждый пиксель имеет значение между 0 и 255, где 0 соответствует чёрному, а 255 соответствует белому. А значения между 0 и 255 принимают различные оттенки серого, где значения ближе к 0 более тёмные, а значения ближе к 255 более светлые.

    Цветные пиксели обычно представлены в цветовом пространстве RGB. Каждая из трёх компонент представлена целым числом в диапазоне от 0 до 255 включительно, которое указывает как «много» цвета содержится. Затем мы объединяем значения всех трёх компонент в кортеж вида (красный, зеленый, синий). К примеру, чтобы получить белый цвет, каждая из компонент должна равняться 255: (255, 255, 255). Тогда, чтобы получить чёрный цвет, каждая из компонент должна быть равной 0: (0, 0, 0).

    Исходное изображение:

    Колоризация на Python с использованием библиотеки Matplorlib

    Для колоризации используем функцию mpl.colors.ListedColormap, которая позволяет создать пользовательскую шкалу. В нашем случае использовались коричневый, оранжевый, желтый и зеленый.

    Колоризация на Python c использованием примитивных операций

    Для решения этой задачи используем возможности стандартной библиотеки PIL. Мы будем циклом проходить по каждому пикселю и, в зависимости от значений первого цветового канала, перекрашивать каждый пиксель в коичневый, оранжевый, желтый и зеленый.

    Колоризация на C++

    Воспользуемся библиотекой OpenCV для решения задачи колоризации на C++. Создадим консольное приложение, которое на вход будет подавать наше уже известное изображение собаки.

    Выводы по работе

    Проведена колоризация черно-белого изображения тремя разными методами: на Python с использованием библиотеки PIL, Matplotlib и на C++.

    На вход подавалась 1 черно-белая фотография размером 631 на 631 пиксель. На выходе алгоритм выдавал колоризированное изображение по заранее заданной цветовой шкале.

    Составим таблицу, чтобы сравнить быстродействие реализованных алгоритмов.

    Алгоритм Python с библиотекой Python нативно C++
    CPU times 154 ms 543 ms 0,467 ms
    Wall time 164 ms 545 ms 0,467 ms
    Таким образом, мы выполнили колоризацию черно-белого изображения по изначально заданным значениям. Отмечу, что использование C++ заметно уменьшает время работы алгоритма, в то время как нативное использование стандартных функций предполагает наиболее долгую обработку.
  • About

    No description, website, or topics provided.

    Resources

    Stars

    Watchers

    Forks

    Releases

    No releases published

    Packages

    No packages published