Выполните задания, изображения для манипуляций находятся в прикреплённых файлах (серый, цветные и текстовые). Нужны подробные комментарии в тексте программ.
В файле 2 пдф - оригинал задания.
Задание 1
- Создать кодирующую программу, которая принимает
изображение в оттенках серого (8-бит) и 8-битное двоичное (чёрный и белый)
изображение-сообщение и выводит их совмещённую версию (на принятое изображение
надо наложить сообщение). Сделать это надо путям добавления 0 (для чёрного
бита) и +1 (для белого бита). Нужно придумать, что будет делать программа при
добавлении +1 к 255: лучшая опция ничего не делать с этим битом в этом случае.
- Сделать программу, что будет получать зашифрованное
сообщение из изображений, полученных в первой (кодирующей) программе. Программа
должна выводить 8-битное двоичное (чб) изображение с 255 (белый) для фона и 0
(чёрный) для текста
- С помощью декодирующей (второй) программы надо
расшифровать:
1) carriers/grayscale_carrier-00007.png
2) encoded.png
Предполагается, что у закодированного изображения и у
изображения на которое накладывается сообщение одинаковое разрешение.
Формат сдачи: сделать папку, в которой будет храниться код
обеих программ, пример закодированной и пример раскодированное картинки (одна и
та же картинка) и сообщения из закодированный картинок из третей части, как
комментарии в исходном файле.
Задание 2
Проблема в первом задании заключается в том, что любой
человек может получить зашифрованное сообщение из закодированной картинки
использую базовые инструменты обработки изображений. Для того чтобы это
исправит нужно использовать генератор случайных числе, который будет
присваивать случайные места, в которые нужно добавлять закодированные пиксели.
Подходящий генератор случайных чисел есть в Python
https://docs.python.org/2/library/random.html
Прочитав документацию, становится понятным, что надо
сделать:
1) Запросить пользователя ввести string пароль
2) Передать пароль функции random.seed()
Самый простой способ сгенерировать случайные места это
создать array включающий все возможные места в изображении, и потом
перемешать их в случайном порядке, чтобы дать порядок, в котором они будут
использованы для кодирования.
Нужно iterate по этому array,
случайно меняя адреса пикселей.
- Нужно написать шифровальную и дешифровальную программу
(кодирующую и декодирующую), использую то, что обсуждалось выше. Не забывайте,
что каким-либо образом надо решить что делать, если значение пикселя исходного
изображения – 255.
- Используя декодер из задания 1 напишите программу, что
визуализирует расположение зашифрованных пикселей.
Формат сдачи: сделать папку в которой будет храниться код
обеих программ (кодер и декодер), пример закодированное и декодированного
изображения вместе с исходным изображением, а также закодированное изображение
из второй части задания вместе с изображением, показывающем распределение
зашифрованных пикселей.
Задание 3:
- Использую Gaussian noise distribution
(гауссовое распределение шума), напишите программу, выдающую изображение с
добавлением этого шума (использую генератор случайных чисел).
- Integrate
your password-based random number seeding approach from Part B to allow a
sender/receiver
pair to generate such common noise distribution on any available image from a
common password input. – Я если честно не понимаю что именно
просится, как я понимаю, надо создать одинаковый шум на всех картинках,
использую ваш подход к генератору случайных чисел из прошлой программы.
Способ сдачи: код в отдельной папке, пример изображений без
и с шумом (сгенерированном вами)
Задание 4:
Задание 2 использует только серые изображения, здесь надо
модифицировать для цветных
Теперь у нас в три раза больше мест для кодирования (Ширина
Х Высота Х 3 канала цвета) – можно использовать для решения проблем с битами
значение которых 255. Для этого:
Для каждого места-адреса (i, j) в
изображении:
1) Используйте генератор случайных чисел (который генерирует
их из string пароля) для того чтобы выбрать случайный адрес (c, r) в исходном изображении (сначала c, потом r)
2) Используйте тот же генератор случайных чисел, чтобы
выбрать случайный канал цвета i – 1, 2 или 3.
3) Если адрес (c, r, i) уже использовался или его
значение 255 – генерируйте другой адрес, пока не найдётся подходящий
4) Закодируйте в найденном адресе пиксель из
изображения-сообщения
- Напишите кодирующую и декодирующую программу, которая
использует данный подход. Помните, что теперь исходное изображение цветное, а
не серое. Разрешение обоих изображений всё так же одинаковое.
- Используйте вашу программу из задания 3, чтобы перед
кодированием изображения добавлялся шум в изображение
Формат сдачи: в отдельной папке код кодера/декодера