Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038

Хранение данных в изображениях при сжатии с потерями

05.01.2016, 11:12. Показов 1682. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Есть задача требующая реализации алгоритма, позволяющего обеспечить гарантированную передачу данных через "носитель", которым являются файлы изображений, применяющие сжатие с потерями, в частности JPEG.
Требуется обеспечить наиболее плотное хранение данных (без потерь) на изображении при условии, что уровень сжатия изображения будет не выше некоторого уровня. Возможны ситуации, когда изображение пересжималось несколько раз.

Подскажите с алгоритмом, можно ссылками, никак не составлю правильный запрос для поиска в интернете.
Желательно, чтобы также присутствовали варианты попроще для реализации работающего прототипа, а потом уже разбираться с более продуктивными, но требующими больше времени на понимание и реализацию.

Есть, например, готовые решения c QR-кодами, но нужно что-то получше.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.01.2016, 11:12
Ответы с готовыми решениями:

Ошибка при сжатии базы данных
При сжатии базы данных появляется сообщение "Не удается найти поле Description'" В справке - Ошибка 3799, ссылка на несуществующий столбец....

Образ раздела занимает 102ГБ при данных на диске всего 24ГБ при стандартном сжатии
Народ, кто нибудь может объяснить почему образ раздела занимает 102ГБ при данных на диске всего 24ГБ при стандартном сжатии. Весь раздел...

Run-time error при сжатии базы данных
Добрый день! Подскажите, пожалуйста, как упредить ошибку 3045, возникающую при запуске команды на сжатие других закрытых баз данных...

24
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
08.01.2016, 02:29  [ТС]
Пока что удалоcь найти только пример где каждый бит данных преобразовывался в небольшой квадрат черного или белого цвета. Но это явно не то.
0
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,953
Записей в блоге: 2
08.01.2016, 11:49
То есть в исходное изображение добавляются некоторые "водяные знаки" по которым можно идентифицировать имедж. И требуется чтобы они "выживали" при компрессии имеджа?
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
12.01.2016, 23:25  [ТС]
Цитата Сообщение от Igor3D Посмотреть сообщение
То есть в исходное изображение добавляются некоторые "водяные знаки" по которым можно идентифицировать имедж. И требуется чтобы они "выживали" при компрессии имеджа?
Нет, никакой стеганографии и водяных знаков. Хотя это тоже интересная задача, и, возможно, наработки по ней тоже можно использовать.

Задача в использовании именно самой картинки полностью и целиком, как непосредственного носителя данных. но поскольку носитель не надежный, нужно предварительно подготовить данные для противостояния ошибкам, и потом уметь их восстанавливать из картинки.
0
4044 / 2655 / 583
Регистрация: 11.09.2009
Сообщений: 9,488
13.01.2016, 03:39
Цитата Сообщение от wingblack Посмотреть сообщение
Нет, никакой стеганографии и водяных знаков
Если речь идёт не о наложении данных на картинку, а о беспотерьном сжатии данных алгоритмом, предназначенным для сжатия картинок с потерями, то или используйте алгоритмы, предназначенные для сжатия данных, или представляйте элементы данных в виде, максимально приближенном к элементам картинок. Причём к достаточно крупным элементам, чтобы при "ситуации, когда изображение пересжималось несколько раз" не возникали потери.
Вообще, если это не скрытая передача данных в картинках, то чем это отличается от QR-кодов?
Допустим, что если формировать картинку в виде текста (нули и единицы, или более различимые знаки - белые и чёрные квадраты), то до тех пор, пока при пересжатиях картинка распознаётся, можно считать, что данные передаются без потерь.
Но это в сущности и есть те самые QR-коды...

wingblack, в чём изюминка нового велосипеда?
0
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,953
Записей в блоге: 2
13.01.2016, 09:58
Цитата Сообщение от i8085 Посмотреть сообщение
wingblack, в чём изюминка нового велосипеда?
Присоединяюсь к вопросу. Не очень понятно что надо получить
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
14.01.2016, 14:14  [ТС]
Цитата Сообщение от i8085 Посмотреть сообщение
Вообще, если это не скрытая передача данных в картинках, то чем это отличается от QR-кодов?
Смысл получается тот же - передать информацию через изображение с потерями. QR-коды сделаны/используются для нанесения на предметы и распознания их снимков с фотокамеры, и хранят мало информации - обычно сокращенную ссылку на сайт. А хочется попробовать сделать более вместительный аналог, который хранит данные только в цифровом мире, но на картинках(или даже видео) с потерями.
Цитата Сообщение от i8085 Посмотреть сообщение
Допустим, что если формировать картинку в виде текста (нули и единицы, или более различимые знаки - белые и чёрные квадраты), то до тех пор, пока при пересжатиях картинка распознаётся, можно считать, что данные передаются без потерь.
Вот как я и говорил ранее, подобное мне найти удалось - простой алгоритм преобразовывал биты данных в черные и белые квадратики на изображении (правда если при сжатии там появлялись серые квадраты, то алгоритм такие места, как и ожидалось, восстанавливал неверно).
А ведь можно использовать цветные квадратики, учитывать предполагаемые изменения изображения при сжатии, использовать коррекцию ошибок. Или, например, научиться хранить данные таким образом, чтобы даже при сильном сжатии часть данных сохранялась. Например, часть данных сохраняем в огромные квадраты, поверх них формируем по какому-то правилу квадраты поменьше, которые вмещают больше данных, но более подвержены помехам, и т.д. Потом каким-то образом все это пытаемся вытащить.
Пока только фантазии, да.

Цитата Сообщение от Igor3D Посмотреть сообщение
Присоединяюсь к вопросу. Не очень понятно что надо получить
Описать алгоритм который умеет следующее:
1) на вход передается файл с произвольными данными, и число R от 0 до 100
2) алгоритм на основе данных в файле создает серию изображений - матрицы RGB пикселей размера N*M (bitmap-ы)
3) каждое изображение сохраняется в JPG файл с качеством равным R

Далее должен быть обратный процесс
1) читаем серию JPG файлов, извлекаем массивы точек RGB(bitmap)
2) извлекаем данные из изображений согласно нашему алгоритму
3) сохраняем данные в файл

Для заданного R содержимое файла с данными на входе и содержимое файла на выходе должны быть одинаковыми.
Update: При этом такой алгоритм должен преобразовывать данные в изображения настолько компактно, насколько возможно (минимум используемых пикселей).
0
4044 / 2655 / 583
Регистрация: 11.09.2009
Сообщений: 9,488
14.01.2016, 17:41
Цитата Сообщение от wingblack Посмотреть сообщение
такой алгоритм должен преобразовывать данные в изображения настолько компактно, насколько возможно
Уже просчитано и реализовано: QR-коды.

Не по теме:

Давайте я вам лучше другую идею подкину. Тоже на основе закона сохранения информации:
Вот перед вами экран M x N точек.
Пишете программу, которая число с простого счётчика разрядностью (M x N) бит выводит на этот экран в виде изображения. Ноль - чёрная точка, единица - белая.
Так как этот счётчик переберёт все возможные варианты расположения точек на экране, то вы увидете все возможные чёрно-белые картинки размером M x N точек.
Сидите и смотрите, делайте скриншоты. Вы увидите все тексты величайших произведений, в том числе которые ещё не написаны, чертежи и описания всех изобретений, включая те, которые ещё не изобретены, и даже то, о чём мы ещё не знаем, что оно есть.
У вас будет реальная возможность не вставая с кресла стать самым богатым и знаменитым человеком планеты.

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

Кстати, из этого эксперимента следует интересный вывод: информация определённого типа - конечна.

0
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,953
Записей в блоге: 2
15.01.2016, 05:12
Цитата Сообщение от wingblack Посмотреть сообщение
Описать алгоритм который умеет следующее:
Примерно понятно, спасибо за подробные разъяснения. Т.е. вся картинка (целиком) посвящена "кодированию", ничего другого там нет.

Если так, то неясно какие трудности (с точки зрения изображения). Ну задал набор цветов (типа палитры) чтобы можно было удобно восстановиться, из тех же соображений размер квадратика. И кодируйте на здоровье, как - это уже др вопрос.
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
15.01.2016, 14:26  [ТС]
Цитата Сообщение от Igor3D Посмотреть сообщение
И кодируйте на здоровье, как - это уже др вопрос.
Вот как раз в этом то и есть вопрос - какими способами можно уплотнить запись данных при той же "зашумленности"
Для ч/б сразу напрашивается среднее арифметическое по квадрату, и округление серого квадрата до ближайшего ч/б значения.
А вот если градации серого, то тут можно попытаться компенсировать возникновение смещения по цветности, но 8-битный квадрат гораздо уязвимее к помехам, и я не знаю что можно придумать на таком первом шаге к уплотнению данных.
0
4044 / 2655 / 583
Регистрация: 11.09.2009
Сообщений: 9,488
15.01.2016, 15:00
Цитата Сообщение от wingblack Посмотреть сообщение
можно попытаться компенсировать возникновение смещения по цветности
Почитайте про реализацию в фото-редакторах фильтра JPEG Artifact Removal.
0
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,953
Записей в блоге: 2
15.01.2016, 15:57
Цитата Сообщение от wingblack Посмотреть сообщение
Для ч/б сразу напрашивается среднее арифметическое по квадрату, и округление серого квадрата до ближайшего ч/б значения.
То же самое напрашивается и для цветного, конечно палитра взята с каким-то "шагом".
0
4044 / 2655 / 583
Регистрация: 11.09.2009
Сообщений: 9,488
15.01.2016, 17:54
Цитата Сообщение от Igor3D Посмотреть сообщение
То же самое напрашивается и для цветного...
Надо считать эффективность сжатия. Можно, конечно, увеличивать разрядность цвета, но с точки зрения математики без разницы, будет это представлено как цветовая палитра или оттенки серого, или размер чёрно-белой картинки. Важно сколько всего разрядов на элемент изображения, и не более того.

А вообще, чтобы сделать оптимальное кодирование, надо, чтобы элемент изображения максимально соответствовал виду функции, применяемой в JPEG, чтобы при кодировании получалось минимальное количество коэффициентов и чтобы коэффициенты были максимально простые. Тогда и при многократном перекодировании нарастание ошибок будет минимально, и сжатие максимально. Конечно, до степени сжатия алгоритмов, предназначенных для сжатия данных тут как пешком до Луны - избыточность колоссальная.
Считать надо. А то, что в уме у ТС - всего лишь "протокол о намерениях". Кстати, wingblack, а вы вообще алгоритм JPEG хорошо знаете?
0
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,953
Записей в блоге: 2
16.01.2016, 12:20
Цитата Сообщение от i8085 Посмотреть сообщение
Надо считать эффективность сжатия.
Лучше ее просто "оценить" сравнив тестовые картинки до и после компрессии
0
4044 / 2655 / 583
Регистрация: 11.09.2009
Сообщений: 9,488
16.01.2016, 17:46
Цитата Сообщение от Igor3D Посмотреть сообщение
сравнив тестовые картинки
Для этого надо уже иметь алгоритм, реализованный в программе.
Опять "хотим как лучше, а получится как всегда"? (c) В.С.Ч.
Сначала сляпаем "какой-нибудь" алгоритм, а потом будем изучать, чегой-то оно при старте падает?
Методом "тыка" только дети хорошо получаются.
Считать надо. Моделировать.
Алгоритм сжатия GPEG "заточен" под сжатие вполне определённого типа данных. Если данные описываются функциями разложения без округления, то такие данные GPEG сохранит без потерь.
Вот в эту сторону и надо копать.

Добавлено через 6 минут
Кстати, wingblack, а что вы будете делать, если картинку пережмут в PNG, GIF, TIFF?
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
16.01.2016, 19:26  [ТС]
Цитата Сообщение от i8085 Посмотреть сообщение
Кстати, wingblack, а что вы будете делать, если картинку пережмут в PNG, GIF, TIFF?
Пока рассматривается только случай JPEG.
PNG, если я не ошибаюсь - без потерь или у него есть такой режим - помнится кто-то через него хотел магнет-сылки передавать, и даже что-то делалось на этом поприще.
0
4044 / 2655 / 583
Регистрация: 11.09.2009
Сообщений: 9,488
17.01.2016, 00:47
Цитата Сообщение от wingblack Посмотреть сообщение
Пока рассматривается только...
Да, этот тяжёлый отрешённый взгляд чувствуется.

Пора вам более подробно раскрыть задачу. Что-то в условии не так.
Если это какая-то передача информации с защитой от поисковых роботов, то можно сначала сжать архиватором (можно с паролем), а потом, что получилось, рисовать как QR-коды, только изменив размер картинки.
0
1969 / 825 / 115
Регистрация: 01.10.2012
Сообщений: 4,953
Записей в блоге: 2
17.01.2016, 13:03
Цитата Сообщение от i8085 Посмотреть сообщение
Для этого надо уже иметь алгоритм, реализованный в программе.
Опять "хотим как лучше, а получится как всегда"? (c) В.С.Ч.
Сначала сляпаем "какой-нибудь" алгоритм, а потом будем изучать, чегой-то оно при старте падает?
Методом "тыка" только дети хорошо получаются.
Считать надо. Моделировать.
Ну вот зачем "нагнетать"? Я говорю о простом тесте. Заполнили картинку цветными квадратиками 8x8 и сжали. Потом загрузили сжатую картинку и посчитали средний цвет по каждому квадратику. Отклонение умножить на 4 - вот собственно и "шаг палитры" для 8x8 и данного сжатия. Попробовали уменьшить квадратик и.т.п.

Не по теме:

Вашего мнения о необходимости (глубокого) знания всех деталей jpeg не разделяю. Когда-то (еще в 90-х) читал, помню что идея в преобразовании Фурье и потом упаковка матрицы гармоник "по диагонали". С тех пор я использовал libJPG много раз, иногда компилил из исходников. И академические знания мне ни разу не пригодились. Надо подходить проще - есть алгоритм, ну и есть, менять его все равно не собираемся, просто используем. К тому же на JPG свет клином не сошелся

0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
18.01.2016, 13:25  [ТС]
Цитата Сообщение от i8085 Посмотреть сообщение
Пора вам более подробно раскрыть задачу. Что-то в условии не так.
Если это какая-то передача информации с защитой от поисковых роботов, то можно сначала сжать архиватором (можно с паролем), а потом, что получилось, рисовать как QR-коды, только изменив размер картинки.
Подготовительная стадия к "а давайте файлы на ютубе хранить будем"
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
18.11.2016, 15:09  [ТС]
Недавно вернулся к данному вопросу и смог сделать пробную версию программки по данному топику.
Как результат хождения по граблям:
- бит передается как черный или белый квадрат в формате RGB
- размер получаемого видео файла: для текста - примерно равен исходному файлу, для сжатых файлов или файлов которые плохо сжимаются архиваторами - примерно в 3 раза больше оригинала.
- исходный файл успешно извлекается без изменений после перекодирования видео из-за выкладывания на Youtube, анализ показывает что видео переживет и немного более "жестокое" перекодирование.

TODO:
- немного переделать код с большей оглядкой на работу через кадры видео для упрощения введения будущих улучшений
- проверить необходимость перехода с RGB на цветовое пространство видео.
- проверить изменение размера видео-файла и возможности извлечения оригинала при увеличении количества цветов
- проверить стоит ли увеличивать плотность данных на одном кадре за счет учета механизма работы кодера видео.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2016, 15:09
Помогаю со студенческими работами здесь

Сжатие звука с потерями и обратно (или иное сжатие с потерями)
Доброго всем времени суток. Столкнулся с такой проблемой, есть канал связи с маленькой скоростью на одном конце SDR приемник (дает...

Архивация данных с потерями аудио файлов
День добрый, прошу помочь. Ищу человека который бы смог написать программу. Тема архивация данных с потерями, на примере аудио файлов....

Выборка входящих данных с минимальными потерями
Друзья, пытаюсь реализовать выборку данных , сразу к делу: Входящие данные в настоящем времени, у нас нет ни чего кроме прошлого и...

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

О пределе прочности при сжатии
Всем привет, у меня такой вопрос: дано - предел прочности чугуна при сжатии 800 мПа. Это означает что для начала необратимых изменений в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru