Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет dibr ([info]dibr)
@ 2012-09-19 22:47:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
дискретно-косинусный джипег
     Навеяло.
     Всякие там фотошопы, а также пакетные обработчики картинок, для (при) передискретизации джипегов сначала распаковывают джипег, а затем собственно интерполируют распакованное изображение под новое разрешение. Поскольку хорошая интерполяция - задачка та ещё, правильные программы используют хитрый матан вроде интополяции Ланцоша, а адоб уже который год жуёт bicubic, пытаясь взять не качеством, так хотя бы количеством (bicubic, bicubic smoother, bicubic sharper, bicubic automatic. Хотя, к чести адоба, прогресс по сравнению с первыми версиями bicubic виден невооруженным глазом - бикубик в PS CS6 от Lanczos уже почти не отличить, в то время как в PS6 (который без CS) муар на этом бикубике был отчётливый, "сеточка" при увеличении - тоже :-))

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

     Правда, конкретно фотошопу это не поможет - у него этап распаковки в растр с изначальным разрешением принципиально важен, он же редактор. А вот "командлайновым утилитам" - уже можно. В каком-то виде (но не как у меня, как-то по другому) оно, оказывается, есть в jpegtran. Но можно же больше! И лучше :-)


(Добавить комментарий)


[info]termsl@lj
2012-09-19 15:52 (ссылка)
Поделись!

(Ответить) (Ветвь дискуссии)


[info]dibr@lj
2012-09-19 16:08 (ссылка)
Чем? jpegtran? Это к jpegtran :-) А у меня только идея, и то не полностью моя, программы нет :-)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]termsl@lj
2012-09-19 16:21 (ссылка)
Травой!

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2012-09-19 16:24 (ссылка)
Аааа.
"У меня мало, мне самому не хватит!!!" :-)))

(Ответить) (Уровень выше)


[info]brmail@lj
2012-09-19 15:55 (ссылка)
чисто для примера, есть такая программка, писалась кстати в россии. www.betterjpeg.com. Ее удобно использовать для кропа и прочих красных глаз, а так же для простановки даты на морде фотки, если надо. Не уверен что оно работает точно как ты написал, но фотки оно не портит

(Ответить) (Ветвь дискуссии)


[info]dibr@lj
2012-09-19 16:23 (ссылка)
Ба-лин. Командную строку бы ей, цены бы ей не было. А то я до сих пор пользуюсь для batch stamping идиотской софтиной jdatestamp, с ограничением " если файл создан менее 15 секунд назад - выдать идиотскую ошибку и не работать" (ограничение введено намеренно, есть в коде). Betterjpeg был бы лучше - но использовать dll меня ломает, а командной строки нет (или я не нашёл).

По делу - алгоритм ресайза там не описан, хороших алгоритмов есть достаточно (тот же lanczos), на глаз отличить одно от другого малореально. Поэтому, думаю, для ресайза там всё-таки что-то другое :-)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]david_m@lj
2012-09-20 05:13 (ссылка)
Не знаю про ресайз, но вот тут — http://www.betterjpeg.com/jpeg-plug-in.htm — они хвастаются «более лучшим» DCT при открытии файла.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2012-09-20 06:34 (ссылка)
Ну, "more accurate" - это "более точный". Учитывая, что есть быстрые, но менее точные алгоритмы DCT, а само DCT - сущность математическая, и потому имеет единственный правильный (абсолютно точный) ответ, они просто говорят, что используют алгоритм, дающий максимально точный (или хотя бы "более точный, чем у большинства других") ответ.

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

(Ответить) (Уровень выше)


[info]david_m@lj
2012-09-20 05:15 (ссылка)
Но, кстати, вот же и пакетная возможность — через фотошоп.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2012-09-20 06:27 (ссылка)
Ой, не-не-не. Сейчас это одна строчка внутри "стройной системы костылей и подпорок" из ~20 батничков, в которую с одного конца поступают фотки с типичной скоростью "одна фотка в несколько секунд", а с другого вываливаются тоже фотки :-) Засунуть туда же, в батничек, вызов фотошопа... ну, можно - я даже делал когда-то - но выглядеть это будет довольно странно. И, предполагаю, не очень быстро.

К тому же, если этот "плагин" работает с растром, загруженным в ФШ - мы теряем lossless, если он запускается из ФШ и грузит файл сам - не факт, что это удастся "заскриптовать".

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]david_m@lj
2012-09-20 06:31 (ссылка)
Так, стоп. Если проблема — поставить патч на картинку, то jpegtran же её решает, нет?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2012-09-20 06:36 (ссылка)
Я тормоз, да.
Вероятно, решает. Сейчас проверять некогда, вечером проверю :-)

(Ответить) (Уровень выше)


[info]dibr@lj
2012-09-20 14:50 (ссылка)
Стоп. Я, похоже, совсем тормоз. Скачал jpegtran, читаю его хелп (благо он маленький), и не вижу.

Моя задача - впечатать в картинку некий текст (задаваемый с командной строки). Ключа, позволяющего это сделать, я у jpegtran не нахожу. Я тормоз, или он это таки не умеет?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]david_m@lj
2012-09-20 16:10 (ссылка)
Нет, он текст не умеет, он умеет (насколько я понимаю функцию drop) впечатывать _картинку_. Но сделать картинку из текста можно через IM.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2012-09-20 16:25 (ссылка)
Хмм. Может, у меня какой-то другой jpegtran (хотя - качал с http://jpegclub.org), но у меня в том, что он выдаёт при запуске, "drop" не упоминается вообще (только в "Drop non-transformable edge blocks", что явно не то).

Впрочем, идти через картинку я точно не буду: это и само по себе уже некий overkill, а заменять этим уже работающее, пусть и несколько кривое, решение - было бы странно :-)

(Ответить) (Уровень выше)


[info]blacklion@lj
2012-09-19 16:32 (ссылка)
Это как это оно цвета loseless правит или красные глаза?!

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2012-09-19 16:45 (ссылка)
Так же, как и текст впечатывает: lossy в местах правки (в пределах 8х8 блоков), lossless в остальных местах...

(Ответить) (Уровень выше)


[info]brmail@lj
2012-09-19 18:05 (ссылка)
насколько я припоминаю дискуссию когда программа создавалась, то распаковка файла целиком не делается. распаковывается только тот квадратик где нужна замена цвета . Ну и что то там внутри для улучшения качества.
Автор там был живой и с ним вполне можно разговаривать. Правда сейчас не знаю, помню про время несколько лет назад

(Ответить) (Уровень выше)


[info]termsl@lj
2012-09-20 12:17 (ссылка)
Поделись!

(Ответить)


[info]tarnyagin@lj
2012-09-22 05:27 (ссылка)
Не работает. Точнее - хорошо не работает. Если одним словом - явление Гиббса не дает хорошо работать.

(Ответить) (Ветвь дискуссии)


[info]dibr@lj
2012-09-22 06:29 (ссылка)
Забавно. Буду знать :-)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]tarnyagin@lj
2012-09-22 06:53 (ссылка)
Собственно, хороший линейный ресайз -- это всегда компромисс между явлением Гиббса (термин смешной, да) и неизбежным завалом пространственно-частотной характеристики при использовании неосциллирующего фильтра.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2012-09-22 12:43 (ссылка)
"Либо мылит, либо звенит" - интуитивно понятный размен, но что "звон" может появляться "на ровном месте и без намеренного подъёма ВЧ" (частоты-то заранее ограничены, новых мы не добавляем, имеющиеся не трогаем) - интуитивно неочевидно :-) Кстати, надо бы посчитать какой-нибудь пример, чтобы убедиться - математики-то рассматривают обрезание спектра разложения непрерывной функции, а это не совсем то же, что интерполяция по разложению дискретной функции.

А при масштабировании кроме звона артефактов хватает. Старый фотошоповский бикубик сажал муар при уменьшении и "плитку" (полоски сеточкой) при увеличении, lanczos в image alchemy при уменьшении делал сеточку из тёмных точек...

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]tarnyagin@lj
2012-09-22 14:51 (ссылка)
Ну с бикубиком всё понятно, а сеточка при ланцош-масштабировании -- это интересно. Можно пример? Кружочки я могу понять (и они не должны бросаться в глаза), но не сеточку. Ошибка в реализации наверное.

> математики-то рассматривают обрезание спектра разложения непрерывной функции
>
Математики дискретный вариант давно уже рассмотрели :). Переход от непрерывного к дискретному преобразованию приводит к переходу от линейной свёртки к свёртке циклической. В случае масштабирования "прямо по JPEG-у" это, кстати, будет приводить к забавному артефакту -- пиксели на одной стороне блока 8х8 будут влиять на пиксели дргой стороны. Пример - отмасштабируй одну яркую точку в блоке 8х8 с координатой 1,1 :).

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2012-09-22 15:09 (ссылка)
Возможно я путаю - мне кажется, что "сеточку" в конкретной реализации lanczos я видел при уменьшении, но это было очень давно (как бы не в прошлом веке), а сейчас мне удалось добиться сеточки только при большом увеличении, при уменьшении всё гладко.

http://dibr.homenet.org/temp/test0.jpg - оригинал,
http://dibr.homenet.org/temp/test.jpg - 10х масштабирование при помощи Image Alchemy с ключом -Xd (по мануалу это "Lanczos3", что бы это ни значило). Сеточка вполне заметна на ровных участках невооруженным глазом, "если знать куда смотреть".

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]tarnyagin@lj
2012-09-23 05:44 (ссылка)
А, понял. Это растр. При уменьшении он может быть заметен при масштабном коэффициенте, выражаемом отношением больших взаимных праймов, 17/19, например.. В принципе, растр можно подавить, но тогда фильтр будет принципиально анизотропен. Или использовать гибриды. Или просто смириться с этим.

Насколько было бы проще если бы растровая сетка образовывалась треугольниками, а не квадратами :).

(Ответить) (Уровень выше)