1. Обзор существующих алгоритмов по сжатию изображений
1.1. Алгоритмы сжатия без потерь
1.2. Алгоритмы сжатия с потерями
1.3. Требования к программе
1.4. Используемые технологии
2. Теоретическое обоснование алгоритмов сжатия и поворота изображений.
2.1. JPEG
2.2. Deflate
2.3. Поворот относительно центра изображения
3. Используемые технологии
3.1. Язык программирования Python
3.2. Используемые библиотеки
4. Практическая реализация
4.1. Описание программы
4.2. Реализация
4.3. Примеры
ЗАКЛЮЧЕНИЕ
СПИСОК ЛИТЕРАТУРЫ
СПИСОК СОКРАЩЕНИЙ И УСЛОВНЫХ ОБОЗНАЧЕНИЙ
ПРИЛОЖЕНИЕ
Каждый человек хочет запечатлеть в своей памяти какой-то яркий момент. Допустим это день рождение сына или свое собственное, покупка машины, поездка в дальние страны. Такие события не могу оставаться в памяти с такой же яркостью и точностью как фотографии.
Если рассуждать, что любая фотография сама по себе является отдельной картинкой, с изображенными на них людьми или без людей, наличие людей на самом деле не играет никакой роли (они создают образ изображению); с красивым пейзажем, где показывается первый лучик солнца, или, бьющиеся о скалы волны, которые оставляют на берегу морскую пену или с фотографией какого-то редкого животного, сделанная из глубинки леса в далекой Тайге, а может быть в Сибири.
Сделать интересную и изящную фотографию и получить из нее красивое изображение — это важная работа. Нужно подойти тщательно к выбору момента, который хочется оставить в памяти, чтобы это не было какое-то скудно-размазанное отображение реальности, а наполненный яркими красками вид. Самым главным критерием является качество, то есть формат сохранения картинки. Однако, для того чтобы сохранить качество, ведь это безусловно главная цель у любого человека, нужно иметь огромное количество памяти, где будут хранится эти изображения. Поэтому важно сжать изображение и не потерять его изначальный вид.
Существует множество алгоритмов для сжатия изображений, как с потерей данных, так и без потерь. Если говорить о сжатие картинки из одного формата в другой формат, в общем виде, это называется трансформацией изображения. Помимо этого, изображение также можно поворачивать, и оно будет изменяться. Меняется его качество, резкость, сам размер тоже может уменьшиться.
В течение выполнение квалификационной работы, будут возникать множество вопросов такие как: какие алгоритмы по сжатию существуют, чем они отличаются, их преимущества и т.д. Ответы на них будут разобраны в процессе выполнения данной работы для достижения поставленной задачи.
В каждой работе есть определенная цель и конкретные задачи, которые необходимы для выполнения. Они дают полное правильное спланированное и сконструированное представление о процессе.
Основная цель данной работы - создание программы, в который реализованы алгоритмы по трансформации изображений.
Составление задач помогает целостно увидеть общую картину работы. Они направляют в процессе реализации программы, разбивая большие темы на более мелкие с определенным назначением.
Поставленные задачи для данной работы являются:
- обзор существующих алгоритмов;
- сбор и изучение материалов по алгоритмам с потерей данных и без потерь;
- разбор полученных данных по сжатию изображения:
- способы реализации;
- различия;
- преимущества;
- подробный разбор алгоритма JPEG;
- подробный разбор алгоритма Deflate;
- сбор и изучение материалов по повороту вокруг центра изображения;
- подробный разбор поворота вокруг центра изображения;
- моделирование программы;
- проектирование программы;
- реализация программы;
- тестирование программы;
- сбор и изучение материала по языку программирования Python;
- разбор полученных данных по языку программированию Python;
- рассмотрение необходимых данных для реализации программы;
- анализ полученных данных.
1. Обзор существующих алгоритмов по сжатию изображений
В наше время сфера информационных технологий развивается очень
быстро. Неудивительно, что на данный момент существует множество алгоритмов, которые позволяет трансформировать изображение.
В данном разделе будут рассмотрены часто используемые алгоритмы по сжатию изображения с потерями и без потерь.
1.1. Алгоритмы сжатия без потерь
Самым распространенным алгоритмом является Run Length Enconding и простой метод для сжатия изображения является алгоритм Run Length Encoding (RLE). Картинка в нем растягивается в цепочку байт по строчкам растра. Само сжатие в RLE совершается из-за того, что в первичном изображение, т.е. исходном, попадаются цепочки схожих байт. Замена их на такие пары как «счетчик повторений, значение» значительно сокращает избыточность данных. [1]
Основная часть метода рассчитана на изображения с крупными сферами или большими областями цикличного тона (картинки, различные схемы, график и т.п.). Минус такого алгоритма считается в том, что в конкретных моментах такой метод способен приводить объема файла снижения к повышению, например, если говорить о разноцветных фотографиях.
Такой алгоритм ориентирован на класс изображений с незначительным числом цветов. Это может быть научная или деловая графика.
Используется в таких форматах как: BMP, TGA, TIFF.
Алгоритм LZW приобрел свое название согласно первым буквам фамилий его разработчиков — Lempel, Ziv и Welch.
Метод отличается от RLE тем, что сжатие осуществляется уже с помощью одинаковых цепочек байт.
Это многофункциональный способ, подходящий для кодирования любых сигналов. Для кодирования элементов применяются коды одинаковой длины, а кроме того используются коды для часто встречающихся последовательностей элементов.
Оформляется табличка абсолютно всех цветов, существующих в сжимаемом изображении. Применяется индекс из таблицы взамен значения цвета пикселя. Часто встречающиеся цвета на изображении обладают наименьшими индексами, а редко встречающиеся цвета располагаются в конце таблицы. Таблица цветов размещается непосредственно между изображением и заголовком. [2]
Создатели предложили метод сохранения данных, а также хорошо документированные алгоритмы сжатия и восстановление сигнала. Способ был запатентован, стандартизован и в данный момент применяется для сжатия любой информации.
Используется в таких форматах как: TIFF, GIF.
Метод сжатия Deflate включает в себя алгоритмы LZ77 и Хаффмна. Первоначально был описан Филом Кацем с целью второй версии его архиватора PKZIP, который в дальнейшем был определён в RFC.
Deflate используется не только в формате ZIP, для которого Кац его первоначально и запроектировал, но и в компрессоре/декомпрессоре gzip и PNG-изображениях. [3]
Более подробно этот алгоритм будет разобран в главе 2, раздел 2.2.
1.2. Алгоритмы сжатия с потерями
JPEG - в настоящий момент один из самых новейших и довольно мощный алгоритм. Он считается стандартным для полноцветных изображений. Алгоритм работает с областями 8х8, где яркость и цвет изменяются относительно плавно. Таким образом, при разложении матрицы такой области в двойной ряд по cosinus, значимыми становится только лишь первые коэффициенты. Из этого следует, что сжатие JPEG происходит из-за плавности изменения цветов изображения. [4]
Более подробно этот алгоритм будет разобран в главе 2, раздел 2.1.
Были разработаны два алгоритма данных с потерей данных (JPEG) и без потери данных (Deflate на основе PNG), а также разработан поворот изображения.
Проанализировав полученные данные экспериментов, можно заметить, что алгоритм JPEG помогает уменьшить размер изображения в несколько раз (от 10 и более). Однако, если коэффициент сжатия использовать больше, чем единица, то изображение начинает терять качество. Могут появляться резкие переходы от границ фигур и картинки начинает приобретать некую размытость в виде деления на пиксели (рисунок 26,27).
Рисунок 26 - Изображение, полученное при помощи алгоритма JPEG
Рисунок 27 - Изображение, полученное при помощи алгоритма PNG В период выполнения выпускной квалификационной работы были выполнены следующие задачи:
- реализация алгоритма с потерей данных (JPEG);
- реализация алгоритма без потери данных (Deflate на основе PNG);
- реализация алгоритма поворота относительно центра изображения;
- анализ полученных;
- сравнение полученных данных в виде графика.
Были разработаны два алгоритма данных с потерей данных (JPEG) и без потери данных (Deflate на основе PNG), а также разработан поворот изображения.
Проанализировав полученные данные экспериментов, можно заметить, что алгоритм JPEG помогает уменьшить размер изображения в несколько раз (от 10 и более). Однако, если коэффициент сжатия использовать больше, чем единица, то изображение начинает терять качество. Могут появляться резкие переходы от границ фигур и картинки начинает приобретать некую размытость в виде деления на пиксели (рисунок 26,27).
Рисунок 26 - Изображение, полученное при помощи алгоритма JPEG
Рисунок 27 - Изображение, полученное при помощи алгоритма PNG В период выполнения выпускной квалификационной работы были выполнены следующие задачи:
- реализация алгоритма с потерей данных (JPEG);
- реализация алгоритма без потери данных (Deflate на основе PNG);
- реализация алгоритма поворота относительно центра изображения;
- анализ полученных;
- сравнение полученных данных в виде графика.