Какая модель JPG-сжимаема меньше всего? (камера снимает кусок ткани, масштаб / угол / освещение могут отличаться)

46

Я пытаюсь спроектировать ткань, которую с точки зрения камеры очень сложно сжать с помощью JPG, что приводит к файлам большого размера (или приводит к низкому качеству изображения, если размер файла фиксирован).

Он должен работать, даже если ткань находится далеко от камеры или повернута (скажем, масштаб может варьироваться от 1x до 10x).

Шум довольно хороший (трудно сжимать), но он становится серым, если смотреть издалека, и становится легко сжимаемым. Хорошим шаблоном будет фрактал , похожий на все шкалы.
Листва лучше (листья, крошечные ветви, маленькие ветви, большие ветви), но она использует слишком мало цветов.

Вот первая попытка: Самый несжимаемый

Я уверен, что есть более оптимальные модели.
Может быть, тесселяции шестиугольника или треугольника будут работать лучше.

JPG использует цветовое пространство Y ′ Cb Cr , я думаю, что Cb Cr можно сгенерировать аналогичным образом, но я думаю, что лучше не использовать равномерно весь диапазон Y (яркость), так как камера будет насыщать яркие или темные области ( освещение никогда не бывает идеальным).

ВОПРОС: Каков оптимальный рисунок ткани для этой проблемы?

Николас Рауль
источник
1
Мне придется следить за этим вопросом ... если будет получен интересный ответ, я могу предсказать заказ ткани на сайте www.spoonflower.com (или аналогичную услугу) и действительно трудно посмотреть на рубашку, которую нужно добавить в мою коллекцию ;-)
RBerteig
Интересный проект конкурса шаблонов может быть: 1) взять изображение высокой четкости с таким шаблоном 2) повернуть его, взять случайную его часть (в случайном масштабе), немного размыть, добавить немного шума и небольшой случайный цвет отклонение 3) Сжать его с помощью JPG 4) Посмотреть размер файла, рассчитать метрики о потере качества и рассчитать «оценку», используя эти метрики. 5) Повторите много раз, чтобы приблизиться к среднему баллу этого паттерна. 6) Повторите с другими паттернами и сравните баллы
Николас Рауль,
1
Поскольку алгоритмы с потерями всегда могут сжимать больше, выбрасывая больше данных, кажется, что вам больше повезет с использованием шаблонов, которые зависят от высокочастотных деталей. Например, тонкие линии. Другими словами, он может хорошо сжиматься, но качество очень быстро ухудшается. Я полагаю, зависит от того, что вы хотите достичь. Подумайте, отпечатки пальцев - это классический случай, когда вейвлеты требовались для хорошего сжатия поверх JPEG из-за необходимости сохранять детали.
Datageist
@datageist: Изображение (необработанное изображение с камеры) ткани с линиями может быть трудно сжать, но сделайте шаг назад, сделайте другое изображение: оно будет содержать только серые пиксели, которые очень легко сжать практически без потерь. Шаблон, который я ищу, должен приводить к получению изображений (необработанных изображений с камеры), которые трудно сжать в широком диапазоне масштабов.
Николас Рауль
@NicolasRaoul Правильно, я понимаю, я просто говорю, что все сжимаемо, если вы выбрасываете достаточно информации. Вы просто хотите, чтобы шаблон имел «сложность для сжатия» (то есть для развлечения), или вы пытаетесь активно отговаривать людей пытаться сжимать изображения, содержащие шаблон?
обработке данных

Ответы:

15

Шум довольно хороший (трудно сжимать), но он становится серым, если смотреть издалека, и становится легко сжимаемым. Хорошим шаблоном будет фрактал, похожий на все шкалы.

Ну, есть фрактальный шум . Я думаю, что броуновский шум - это фрактал, который выглядит так же, как вы увеличиваете его. Википедия говорит о добавлении шума Перлина к себе в разных масштабах для создания фрактального шума, который, возможно, идентичен, я не уверен:

Перлин фрактальный шум

Я не думаю, что это будет трудно сжать, хотя. Шум является трудно для сжатия без потерь, но JPEG с потерями, поэтому он просто собирается выбросить детали вместо того , чтобы бороться с ним. Я не уверен, возможно ли сделать что-то «трудное для сжатия в JPEG», так как оно просто проигнорирует все, что слишком сложно сжать при таком уровне качества.

Что-то с твердыми краями в любом масштабе, вероятно, будет лучше, например, бесконечная шахматная плоскость:

бесконечная шахматная плоскость

Также что-то с большим количеством цветов. Может быть, посмотрите на реальные фракталы вместо фрактального шума. Может быть, фрактал Мондриана ? :)

Фрактал Мондриана

эндолиты
источник
1
Большое спасибо! Фрактальный шум - это определенно то, что я искал, но в моих тестах он хорошо сжимается, я думаю, он мог бы использовать более резкий переход, а не плавность, подобную тепловой карте. Проблема шахматной доски в том, что производительность действительно зависит от того, какая часть ткани снята на снимке. Фрактал Мондриана великолепен, и пока лучше всего показал себя в моих тестах. Возможно, он мог бы использовать больше цветов и немного других параметров.
Николас Рауль
@NicolasRaoul: Хм .. Может, ковер Серпинского с цветами ? Это обычная модель стеганого одеяла уже.
эндолит
Тесселяция треугольников или квадратов Серпинского может быть действительно великолепной!
Николас Рауль
14

Если бы мы говорили о компьютерных изображениях, шум был бы правильным подходом. Но здесь есть шаг захвата камеры.

Фрактал бит очень важно из-за проблемы масштабной инвариантности. Это не обязательно должно быть по-настоящему фрактально, если учесть, что существует ограниченный диапазон расстояний, на котором человек будет фотографироваться. Я имею в виду, если человек, носящий ткань, находится на заднем плане картины, это не окажет большого влияния в любом случае ...

Я думаю, что лучший способ обмануть кодер JPEG - это иметь блоки с очень высокими высокочастотными коэффициентами, которые выдержат квантование = много деталей и острых краев; поэтому вся последовательность коэффициентов должна быть записана в явном виде (вместо EOB с 15-м коэффициентом или около того). Шаблон шахматной доски - хороший способ достигнуть этого. Единственным недостатком, который я вижу, является то, что низкое разрешение объектива + фильтры сглаживания камеры имеют хорошие шансы на размытие! Все должно происходить в пределах 8x8 блоков (или 16x16 блоков по цветности), потому что JPEG мало что делает в макромасштабе. Вы должны сделать свои блоки 8х8 как можно более грязными, независимо от того, насколько размыт линза их сделает.

Вот предложение:

масштабно-инвариантный, сложный в JPEG шаблон сжатия

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

Я не оценивал это формально. Лучше всего было бы иметь скрипт, который берет изображение, применяет дюжину кадрирует / изменяет размер / размывает с различными параметрами и разбрызгивает общий размер JPEG.

pichenettes
источник
Большое спасибо! Выглядит довольно похоже на мою концепцию картины в вопросе, на самом деле, но гораздо приятнее. Любая конкретная причина, почему "фрактальность" в 4 раза? Это лучше, чем фактор 2?
Николас Рауль
нет причин, я просто попытался сделать его красивее с большим количеством цветовых оттенков, поэтому я начал с квадрата 4х4.
pichenettes
Есть ли причина выбирать квадраты вместо треугольников? Я пытаюсь прямо сейчас, треугольники делают много острых краев, что я думаю, это хорошая мысль. Низкая «фрактальность» может быть достигнута с помощью подхода гибридного треугольника → ромб → шестиугольник → треугольник. Я думаю, что низкий коэффициент - это хорошая вещь, поскольку он увеличивает вероятность того, что камера обнаружит резкие формы вплоть до предела разрешения.
Николас Рауль
Квадраты было проще всего кодировать. Я не уверен, что другие формы имеют лучшую "плотность краев", чем квадраты.
pichenettes
11

Существует различие между JPEG, пригодным для использования и Transform Compressible.

Взять, к примеру, белый зернистый шум телевизора.

Общий белый шум является максимальным разбросом по частоте, и, следовательно, нет лучшего примера, чем белый шум, который любой метод кодирования в области преобразования не может сжать. Если вы возьмете такой шум и примете DCT (или DFT, если потребуется), мы обнаружим, что частотная область также широко распространена, и все коэффициенты будут иметь значение.

Тем не менее, никто не мешает вам быть агрессивным от квантования. Таким образом, вы все еще можете отказаться от большого количества из высокочастотных областей. Результат будет иметь большую среднеквадратичную ошибку. Тем не менее, восприятие это все равно будет шумом. Это может быть сильно размыто, хотя.

С другой стороны, теперь делайте снимки там, где есть острые края.

Острые края также будут распространяться на более высокой частоте (но, возможно, это будет чуть меньше, чем в первом случае). Однако, пытаясь сжимать его и сбрасывать с высокой частоты, теперь визуально будут возникать серьезные препятствия. Это приведет к размытию краев, эффекту звонка и т. Д. Несмотря на то, что ширина полосы пропускания для таких изображений не является максимально возможной, для JPEG или любого такого эквивалентного сжатия сохранение таких изображений с одинаково воспринимаемым качеством будет непростым делом.

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

Дипан Мехта
источник
Допустим, моя ткань представляет собой таблицу случайных черно-белых пикселей размером 10 ^ 8x10 ^ 8. Камера делает снимок ткани размером 10x10 пикселей. Статистически, не будет ли это изображение размером 10x10 иметь все пиксели очень похожего серого цвета, поэтому его легко сжать с меньшим искажением (любого вида), чем с менее однородным изображением?
Николас Рауль
10

Приведенная ниже композиция показывает структуру фрактального вида паттерна. Каждое следующее изображение является результатом усреднения по каждому блоку 2x2 пикселей предыдущего. Общий характер рисунка остается неизменным, но контраст изображения постепенно уменьшается. Как было сказано ранее, изображение становится серым, когда мы уменьшаем масштаб.

Масштабное поведение

Но используя свойство фрактала, мы могли бы наложить вместе несколько образцов разного разрешения, чтобы сохранить контрастность изображения, чтобы быть стабильной в пределах желаемого диапазона. Ниже приведен пример 4-х слойного рисунка (512x512 GIF). Этот результат более близок к броуновскому шуму, а также к сжатию в формате JPEG.

4-х слойная комбинация

MeV_2015
источник
5

Я предполагаю, что худшим сжимаемым рисунком будет белый шум (с равномерным распределением). Он должен выглядеть шумно при разных разрешениях, так что вы можете создавать зашумленные изображения в масштабе и затем соединять их вместе:

I=inNiGi

Здесь - окончательное изображение ткани, - изображение, заполненное белым шумом (различное для каждого ), а - это гауссово ядро ​​размера . Обозначает свертку.N i i G i i σ INiiGiiσ

Возможно, лучший способ построить такое изображение - работать непосредственно в частотной области, таким образом:

  1. Создайте изображение, заполненное белым шумом.
  2. Выполните 8 × 8 блок IDCT (обратное дискретное косинусное преобразование) на изображении.

Результатом будет худший сжимаемый шаблон для JPEG, так как он имеет наибольшую энтропию в области DCT. Но я не уверен, как это будет вести себя в разных разрешениях.

ЛИБОР
источник
5

IIRC, алгоритм распаковки JPEG указан, однако точный алгоритм сжатия не указан. Различные алгоритмы могут создавать легальный файл JPEG. Так что вам нужно будет проверить это на выбранных вами компрессорах изображений.

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

Это, вероятно, означает изменяющиеся и высокочастотные пикеты, а также изменяющиеся градации серого и цвета, которые оказываются между возможными уровнями квантования данного компрессора при некоторых заданных настройках.

Поскольку вы хотите, чтобы это работало на любом расстоянии при любом освещении, вам нужно будет изменить частоту пикетов (возможно, фрактальную, или, возможно, просто измененную со случайной частотной модуляцией) и уровни цвета и серого (некогерентно, например, изменить цвета и уровни независимо). Дисперсия оттенков будет меньше зависеть от расстояния, поэтому их нужно просто выбрать в худшем случае для выбранных вами квантователей. Средний размер цветовых узоров может быть в два раза больше яркостных узоров, чтобы соответствовать макроблочной композиции YUV 4: 1: 1 (площадь).

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

hotpaw2
источник
2

Позвольте мне поделиться шаблоном, который имеет очень плоский спектр (например, белый шум). Так что этот шаблон очень сложно сжать с помощью JPG. Пример изображения ниже увеличен в 4 раза.

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

Непериодическая картина с квазибелым шумовым спектром

Смотрели издалека: оригинал далеко

MeV_2015
источник
2

Случайный шум действительно сжимается очень плохо. Вы можете получить его в цвете, генерируя независимые значения R, G, B.

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

При добавлении изображений вы сталкиваетесь с проблемой диапазона значений, который увеличивается по мере увеличения количества изображений, пусть N. Если вы просто усредните их, амплитуда шума уменьшится как 1 / N.

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

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

Ив Дауст
источник
2

Вот еще один подход к получению броуновского шума RGB (4096x4096 GIF). RGB броуновский шум

MeV_2015
источник
0

Удивительный вопрос! По идее, белый шум - это сигнал, который не изменяется при масштабировании по времени. Точно так же фрактал не изменяется при масштабировании по размеру. Процесс сжатия с потерями занимает только самый важный из спектра (время или размер), а не весь, поэтому фрактал и шум пахнут как куки. Поэтому вам следует поиграть с цветами и рисунками вашей ткани. Они должны быть фракталами, а поведение фракталов должно быть случайным образом. Вы должны получить ткань, которая на фотографии выглядит черной (в цветовом пространстве CMY), но в реальном мире она имеет красочный рисунок.

Удачи! и если вы получите ответ, пожалуйста, отправьте его !!!.

редкие слова
источник
«Вы должны получить ткань, которая на фотографии выглядит черной» <- В таком случае, не будет ли это легко сжиматься?
Николас Рауль