LINUX.ORG.RU

Психовизуальный хеш для кожаного

 ,


0

2

Есть задача – снабдить строчку текста картинкой, но места под них нету. 100 байт, 200 край. Картинка нужна такая, чтобы кожаный только узнал что там изображено, никакого качества, но чтобы была цветная. ЖпегХР картинку 32х32 жмёт в 400 байт при качестве 5%, ниже уже просто блоки.

Может есть какой нибудь формат, где психовизуальную модель стероидами накачали? Чтобы смотреть на кучку пикселей и однозначно в них узнавать например Джеймса Бонда?

★★

Последнее исправление: hobbit (всего исправлений: 1)

Ответ на: комментарий от DumLemming

даже если обойтись 16 цветами, это будет 2 байта на каждый пиксель, т.е. всего тебе остаётся 100 пикселей, 10х10

в принципе, можно ужаться, но всё придётся рисовать вручную, скорее всего

anonymous
()
Ответ на: комментарий от thesis

Щаз бы смешивать код и данные. Машина жирная. А данных сохранить/передать можно только 100-200 байт на одну запись

DumLemming ★★
() автор топика
Последнее исправление: DumLemming (всего исправлений: 1)
Ответ на: комментарий от DumLemming

А, вона чо. А картинка прям картинка, или можно какой-нибудь svgz с красным кружком передать, и хватит?

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 1)

То есть картинка в качестве некого штампа достоверности?

ключевые слова randomart и hash visualization. Психовизуальный хэш, так-то, совсем про другое - про схожесть картинок (pSNR и прочее).

Держи статью раз, два

token_polyak ★★★★★
()
Последнее исправление: token_polyak (всего исправлений: 4)

Используй 2 бита на цвет + в начале палитра из 4 цветов в RBG. Выйдет 256 байт на саму матрицу, плюс 4 байта на палитру. Если на картинке не шум, то потом любым компрессором общего назначения сожьмёшь до <200. Для таких мелких пиксель-артов обычно больше 4 цветов не требуется.

Но вообще хотелось бы посмотреть, что там за картинки примерно. Если оно скорее как мини-фотка, а не пиксель-арт, то наверное что-то типа webp можно поробовать…

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 3)
Ответ на: комментарий от DumLemming

Картинка - чтобы показать кожанным Джеймса Бонда и чтобы ни один из них не увидел в нем панина

с цветной картинки 4х4 или с чб 10х10?

нет такой буквы!

вращайте барабан!

olelookoe ★★★
()

convert -quality 4 original.png result.webp. Но разборчивость, мягко говоря, так себе. Впрочем, Бонда от Панина в 32×32 и в лосслесс-то не факт, что отличишь… Впрочем, если твой «кожаный» знал, что был за оригинал картинки, она таки узнаётся. Попробуй, короче.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 2)
Ответ на: комментарий от Irma

Не, так очень сильно падает узнаваемость картинки. 4 цвета на все картинки — очень мало. Но 4 цвета на один пиксель-арт в 32×32 — вполне достаточно. Но если там не пиксельное, а ресайз фоток, то такой вариант не пойдёт, лучше webp -quality 4 — по крайней мере узнаваемо.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 2)
Ответ на: комментарий от Irma

Блин, точно. В 200 байт тупо пишем «James Bond drinking Martini», и всё, дальше пусть нейросетка генерирует!

А если ещё и не в ASCII всё это дело а в своей кодировке, где всего 32 символа (английские буквы + пробел + какой-то минимум пунктуации можно впихнуть), то вообще очень подробное описание можно сделать.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)

Фон у картинки есть? Вырезать (сделать однотонным). Когда-то надо было ужимать картинки, я делал в Гимпе. Вырезал фон, индексированные цвета и формат поддерживающий индексированные цвета (вроде tiff). Сжало так, что мама не горюй. Но размеров не помню.

R_He_Po6oT ★★★★
()

смотреть на кучку пикселей и однозначно в них узнавать например Джеймса Бонда

Это ж персонально от смотрящего зависит. Некоторые однозначно Бонда в любой картинке опознают.

Задача-то в чём?

ya-betmen ★★★★★
()
Ответ на: комментарий от QsUPt7S

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

QsUPt7S ★★
()
Ответ на: комментарий от CrX

Блин, точно. В 200 байт тупо пишем «James Bond drinking Martini», и всё, дальше пусть нейросетка генерирует!

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

QsUPt7S ★★
()
Последнее исправление: QsUPt7S (всего исправлений: 1)
Ответ на: комментарий от anonymous

Какие ещё 2 байта? 4 бита - половина байта, 32х32 занимает как раз те 512 байт которые автору сжал jpeg, оказавшийся бесполезным.

20х20 будет 200 байт.

firkax ★★★★★
()
Ответ на: комментарий от DumLemming

Машина жирная. А данных сохранить/передать можно только 100-200 байт на одну запись

А может тогда в этих 100 байтах хранить индекс картинки, а стопицот картинок хранить в жирной машине?

pihter ★★★★★
()
Ответ на: комментарий от anonymous

Всё не так. 256 цветов это 1 байт (8 бит) на пиксель.

16 цветов — это 4 бита, то есть два пикселя можно засунуть в один байт.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от Irma

В 32 на 32 влезет 20 знакомест размером 6 на 8, можно просто словами написать, кто тут.

Ну так может просто текст хранить в ста байтах, а картинку из него на ходу генерить?

pihter ★★★★★
()

unicode :-)

туда столько всего напихали, что в 100-200 байт поместится целый мульт, а не то чтобы иллюстративное изображение «склянка с мутью»

MKuznetsov ★★★★★
()
Ответ на: комментарий от pihter

Может, это встройка какая-нибудь.

Еще был спектрум с его дурной видеопамятью 7 килобайт, в которую влезала не очень полноцветная картинка 256 на 192.

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

Irma ★★
()
Ответ на: комментарий от anonymous

8 бит это любые 256 цветов из заранее заданной палитры. Это могут быть оттенки серого, красного, зелёного, web-палитра со всеми основными цветами, и вообще угодно. Да, естественно, палитру перед этим придётся где-то задать.

CrX ★★★★★
()
Ответ на: комментарий от anonymous

Берём 256 нужных цветов. Каждому присваиваем индекс от 0 до 255. Получаем палитру. Затем каждый пиксель записываем одним байтом. Палитру можно использовать одну на все изображения, и эти данные не надо таскать с картинкой. Займёт такая палитра 768 байт. С изображениями большого разрешения можно делать палитру под каждое уникальную и таскать с собой (768 байт в заголовке на фоне экономии по сравнению с режимом RGB — ничто). Можно нигде не хранить палитру, а использовать уже созданную и всем известную палитру Web из 256 «HTML-цветов». Либо можно вообще не использовать палитру, а вместо RGB использовать, например YUV.

CrX ★★★★★
()
Ответ на: комментарий от CrX

Кстати, вот так выглядит Джеймс Бонд на 194 байта в предложенном выше webp: https://0x0.st/XqJR.webp — тут quality 5. Но боюсь, с 5 может для некоторых картинок превысить 200. Можно жать с 5, проверять, укладывается ли результат в 200 байт, и если нет — пережимать с 4.

Кстати, там первые 12 байт можно отрезать. В начале идёт «RIFF», затем 4 байта на размер файла (его можно высчитать же из собственно размера), и затем WEBP. Можно их отрезать, а потом обратно приделывать, когда нужны.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 3)

передаешь номер картинки, всё.

юзер, медленно-торжественно-печально, идет на ваш сайтег и там по номеру находит картинко, хоть в 4к

и, соот-но, опознает

остальное суета и томление духа

olelookoe ★★★
()