Новый метод ресайза: программа С3С Image Size

Всего 808 сообщ. | Показаны 261 - 280
Re[фоторулюбитель]:
Вопросов к алгоритмам ресайза ФШ у меня нет. С моей точки зрения, они работают правильно за исключением учёта гаммы. Я это проверил на своём софте и почти всё совпало.
Вопрос в другом. Есть две разные ситуации:
1. Загружаем джипег из фотоаппарата или с диска.
2. Загружаем рав из фотоаппарата.
В первом случае нет учёта гаммы при ресайзе, поэтому при изменении размера изображения (на экране или при уменьшении размера кадра) видим затемнения.
Во втором случае всё должно быть иначе. Картинка вместе с профилем камеры загружается в ФШ и перед выводом на экран на неё накладывается профиль монитора. Известно, что учёт профилей камеры и монитора ФШ делает корректно. Теперь, если мы такую картинку попробуем отмасштабировать на экране (не изменяя исходный размер файла), то появятся ли искажения, как в первом случае?
Re[megapolis]:
попробовал
разницы не вижу

и не совсем понимаю - почему Вы думаете что в JPEG не учтена гамма ?
Re[фоторулюбитель]:
Спасибо.
Когда ФШ сохраняет в джипег, то всё делается правильно. Сохранение обычно делается в sRGB, поэтому гамма там есть. Но для ресайза джипега (или любого файла без встроенного icc-профиля) нужно сначала сделать обратную гамму, чего ФШ не делает. В этом весь смысл с3с и именно поэтому он лучше, чем ФШ.
Re[megapolis]:
от:megapolis
Алгоритмы разные бывают. В Википедии описано, как по четырём точкам сделать интерполяцию в двумерном случае. Рассмотрим более простой вариант — одномерный. Если есть набор точек и ему нужно сделать ресайз в 10 раз, то в итоге останется каждая десятая точка. Далее берёте формулу из Википедии считаете билинейное усреднение для каждой новой точки, причём оказывается, что все исходные точки не нужны, так как для их формулы достаточно лишь двух точек. Остальные точки в формуле не присутствуют, поэтому получается, что их просто выкидывают (это называется прореживание). Из-за этого прореживания возникают сильные артефакты, поэтому такой метод использовать не стоит.

Если не делать прореживание и учитывать все точки, то нужно считать линейную комбинацию по всем точкам (размер окрестности задаётся масштабом интерполяции). Сначала по одной оси, потом по другой. Этой формулы в Википедии нет. Билинейным ядром, которое включает в себя АА-фильтр, является функция типа треугольника: х+1 для отрицательных и 1-х для положительных. Эта функция определяет веса для всех исходных точек при билинейной интерполяции. В общем случае получается фильтр, коэффициенты которого определяются типом интерполяции. Можете посмотреть в исходники любых открытых проектов по ресайзу, там именно так и сделано.
Подробнее


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

Другой вариант применить цифровую фильтрацию (АА-фильтр (частотные методы ), без него будет метод ближайшего соседа) и сделать выборку, это уже зовется децимацией.
http://ru.wikipedia.org/wiki/%CF%E5%F0%E5%E4%E8%F1%EA%F0%E5%F2%E8%E7%E0%F6%E8%FF
Re[megapolis]:
Очень много алгоритмов реализовано в ImageMagick http://www.imagemagick.org/Usage/filter/nicolas/
Re[c3c]:
от:c3c
Вот смотрите. При ресайзе неизбежно происходит усреднение. Например (возьмем одномерный и монохромный случай), подряд идут точки со значениями

252, 252, 252, 252, 255, 252, 252, 252, 252

Допустим, уменьшаем размер втрое. Тогда (примитивно), вместо каждой тройки точек остстается одна со значением, равным среднему арифметическому из трех. Получаем:

252, 253, 252

То есть максимум уменьшился с 255 до 253. И есть повод выполнить выравнивание контраста, чтобы максимум вернулся к значению 255. Может получиться, например:

253, 255, 253

Если бы подряд шли хотя бы 3 точки со значением 255, то максимум бы не изменился.

Поэтому:
1. Речь не обязательно должна идти о максимуме равном 255.
2. Участок максимальных (минимальных) значений должен быть по протяженности сопоставим и коэффициентом уменьшения, чтобы общий контраст не изменился.
Подробнее



Мысль хорошая, в целом получается что-то типа полосового фильтра ВЧ.

Результат реализации получается похоже немного не тот что задумывался.

Например



С адаптивным контрастом выглядит немного светлее




разность в светлую сторону (контраст увеличен)




дополнительное вычитание



разность в темную сторону (контраст увеличен)




Другой кадр



Суммарная разность (в большую и меньшую стороны сильной разницы нет)




Различия в основном представляют шум, он субъективно в какой-то мере повышает детализацию, но мне кажется должно получатся что-то более отличное от шума.
Re[Podlesnykh Vladimir]:
[quot]В целом почти так. В Википедии описан метод который используется при увеличении. При уменьшении линейным методом берется среднеарифметическое участка и это значение присваивается новой расчетной точке. Другой вариант применить цифровую фильтрацию (АА-фильтр, без него будет метод ближайшего соседа) и сделать выборку, это уже зовется децимацией. [/quot]

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

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

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

У билинейного алгоритма ядро интерполяции имеет форму треугольника с функцией f(x)=1-abs(x). А у ФШ используется прямоугольное ядро с функцией f(x)=1, которое в англоязычной литературе называется BOX, что соответствует не билинейному алгоритму интерполяции, а усреднению соседних точек с одинаковыми весами. У билинейного алгоритма веса соседних точек меняются по линейному закону и они разные. Я получил картинки, на которых видно, что изображение после ФШ с билинейным алгоритмом совпадает с интерполяцией по BOX. Также видны отличия от настоящего билинейного алгоритма. Таким образом, в ФШ вообще нет билинейной интерполяции. Есть интерполяция по алгоритму BOX и есть разные варианты бикубика. И это всё...

В программе с3с тоже используется именно BOX для интерполяции, хоть об этом явно и не говорится. Я это проверил, доказательства есть :)

Дело не только в том, что ФШ ошибается. Программа отличная. Важный момент состоит в том, что при работе в ФШ с функцией ресайза происходит подмена понятий, т. е. вместо одного алгоритма используется другой. Если я не прав, то хотелось бы узнать где именно.

Я лишь недавно понял, что проблема учёта гаммы в ФШ касается не только ресайза. Поворот изображения на произвольный угол делается по алгоритмам, аналогичным интерполяции, поэтому там однозначно должна быть та же самая ситуация: нужно учитывать гамму и при повороте. Я думаю, список таких функций не ограничивается ресайзом и поворотом. В общем случае, при практически любой обработке изображений, где исходными данными должны быть линеаризованные значения, это может оказаться важным. Повторюсь, это касается только случая, когда изображение без встроенного icc-профиля загрузили в ФШ с диска для просмотра или редактирования.
[quot]Очень много алгоритмов реализовано в ImageMagick [/quot]
Очень хорошая ссылка. Прямо в ней можно увидеть различия между Bilinear и BOX:
http://www.imagemagick.org/Usage/filter/#triangle
Re[megapolis]:
Не поленился, нарисовал "шахматную доску " 10х10 http://yadi.sk/d/sS8slhKWANiak результат совпадает билинейный

Проблема ФШ с гаммой также в размытии, резкости и прочих алгоритмах где задействованы соседние точки. При увеличении резкости(Unsharp Mask) с гаммой 1,0 намного меньше светлые ореолы.

В Lightroom (давно его не ставил) используется рабочее пространство MelissaRGB (ProPhoto RGB c гаммой 1,0) по крайней мере при конвертации RAW точно ..

http://forums.adobe.com/thread/779349?start=0&tstart=0

если так, там проблем нет

Хваленый ресайз "Least-Squares Image Resizing Using Finite Differences" в реализации для ImageJ тоже проблему с гаммой имеет, а с 16 не работает.

http://bigwww.epfl.ch/algorithms/ijplugins/resize/
http://www.ee.cuhk.edu.hk/~tblu/monsite/pdfs/munoz0101.pdf
Re[Podlesnykh Vladimir]:
Не стоит опять пробовать найти ответ на пальцах с помощью простейшего изображения. Шахматная доска представляет собой неправильный выбор картинки для теста. Вместо этого нужно написать небольшую программу и посмотреть точно, что же получается для любой картинки и для любого алгоритма. Сравните BOX и Bilinear с результатами ФШ. Я уже сравнил - для ФШ это одно и то же. Или попробуйте ImageMagic, у которого с этим вроде всё хорошо.

Идея сравнения существующих алгоритмов ресайза мне очень интересна. Их не так много, поэтому хорошо бы сравнить как алгоритмические подходы, так и полученные результаты. Я предлагаю сравнивать на мирах, а не на шахматных досках :)
[quot]Проблема ФШ с гаммой также в размытии, резкости и прочих алгоритмах где задействованы соседние точки. При увеличении резкости(Unsharp Mask) с гаммой 1,0 намного меньше светлые ореолы. [/quot]
Я как раз про это и написал чуть раньше. Гамма важна не только для ресайза, а и для всех остальных действий по обработке изображений. Поэтому если ФШ обратную гамму не делает, то её нужно сделать самому, после чего выполнять любую обработку изображений.

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

За ссылки спасибо, почитаю.

Re[c3c]:
[quot]В этом алгоритме вообще никаких параметров нет. То есть совсем.[/quot]
Как мне кажется, ситуация с отсутствием параметров у программы с3с является недостатком, а не преимуществом. Совершенно очевидно, что параметром мог бы быть тип интерполяции.

Если не ограничиваться единственным прямоугольным ядром свёртки ”Box”, которое в настоящий момент используется в программе с3с вместе с гаммой, а добавить туда алгоритмы интерполяции, которые во многих случаях качественнее (это бикубик, Ланцош и ряд других), то результаты работы программы станут лучше. Кроме того, у пользователя появится возможность выбора алгоритма для данного изображения. Конечно, это уже будет не «алгоритм с3с», а, например, «бикубик с гаммой», но так оно и есть по сути.

Кстати, «бикубик без гаммы» должен совпасть со стандартными алгоритмами в других программах. Это будет косвенным подтверждением правильности расчётов. Пока это проверить невозможно.

Чем с3с лучше, чем стандартный ресайз Фотошопа:
1. Учёт гаммы.
2. Вычисления выполняются не с 8- или 16-битными данными, а с плавающей точкой, что точнее (это особенно важно для гамма-преобразования).

Если кратко, то других отличий нет. Заявленные функции вроде «сохранения микроконтраста» и все остальные собственного смысла не несут. Все различия происходят только из учёта гаммы и точности вычислений. Кстати, «стойкость к муару» гораздо выше у других алгоритмов интерполяции, которые в программе с3с не присутствуют.

P.S. Если бы в программе было совмещённое с гаммой повышение резкости и/или изменение контраста, то это дало бы дополнительный эффект благодаря точности вычислений с плавающей точкой. А так после ресайза картинка сохранится в 8- или 16-битах, к которым потом применят повышение резкости или изменение контраста, что приведёт к дополнительным потерям при вычислениях.
Re[megapolis]:
от:megapolis
...
Чем с3с лучше, чем стандартный ресайз Фотошопа:
1. Учёт гаммы.
2. Вычисления выполняются не с 8- или 16-битными данными, а с плавающей точкой, что точнее (это особенно важно для гамма-преобразования).
...
Подробнее

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

У данного плагина есть один единственный самый главный недостаток, ограничивающий его использование - невозможномть встраивания в actions.
Re[OperLV]:
[quot]Всё так, но главное - результат, визуально, в подавляющем большинстве случаев очень хорош.
Остальное - лирика. [/quot]
Лирика - это когда нет желания или возможности объяснить суть, глубинные причины происходящего. Для этого есть физика и математика :)
Зная, из чего состоит с3с и аналогичные варианты, можно хотя бы попытаться найти метод, который ещё лучше. Прогресс примерно так и происходит. Лирика в этом не участвует.
Re[c3c]:
У меня несколько примечаний, касательно невозможности записи открытия/закрытия/ресайза в экшен.

Рассмотрим на примере плагина Getter (обычный плагин, чем-то напоминает листер, без разницы, можно любой рассматривать).

Что мы делаем:
1. Создаем новую группу для экшенов
2. Запускам запись экшена
3. Запускаем плагин Getter из меню автоматизации
4. Закрываем плагин
5. Останавливаем запись.

После проделанных операций, мы сохраняем записанный экшен (расширение *.atn) и смотрим, а что же туда записалось?




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

Открываем Adobe ExtendScript Toolkit CS6 и запускаем такой скрипт:

var aaa = stringIDToTypeID( "adc931a0-cfe2-11d5-98bf-00b0d0204936" );
executeAction( aaa, undefined, DialogModes.NO );


Что происходит? Верно. Открывается плагин Getter. Если взять ваш плагин, то этот GUID находится у вас здесь:




Запускаем этот код:
var aaa = stringIDToTypeID( "adc931a0-cfe2-11d5-98bf-00b0d0204936" );
executeAction( aaa, undefined, DialogModes.NO );

ничего не происходит и возврат ошибки:
General Photoshop error occurred. This functionality may not be available in this version of Photoshop. Код ошибки 8800.

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

Скачал SDK adobe_photoshop_cs6_sdk_win\pluginsdk\samplecode\ и эти примеры отлично записываются в экшены...




Re[n1kka]:
Ok
Re[c3c]:
надо бы проверить влияет ли эта опция в фотошопе на результат ресайза... в афтер эффектс для такой же опции в подсказке написаночто влияет на ресайз, а в фотошопе сказано только проналожение цветов, может забыли просто написать как обычно...



Re[megapolis]:
от:megapolis
[quot]Всё так, но главное - результат, визуально, в подавляющем большинстве случаев очень хорош.
Остальное - лирика. [/quot]
Лирика - это когда нет желания или возможности объяснить суть, глубинные причины происходящего. Для этого есть физика и математика :)...
Подробнее

Правильно - нет желания.
Лично мне пофиг почему этот плагин ресайзит так, что меня это устраивает.
Вот не устраивало бы, может желание и появилось бы.
В данном случае меня огорчает невозможность встраивания в actions.
И вот на эту тему дискуссия по поиску решения была бы, на мой взгляд, много продуктивней.
Re[OperLV]:
от: OperLV

И вот на эту тему дискуссия по поиску решения была бы, на мой взгляд, много продуктивней.

А что дискуссировать? :) Пока это невозможно сделать на этой версии. Нужно что-то переписывать. Я выше постом отписал автору о том, что удалось выяснить. Но даже если эту версию и получиться вызывать через экшен, то пока нет возможности проставлять параметры ресайза (нет сохранения того же)...
Re[OperLV]:
[quot]Правильно - нет желания.
Лично мне пофиг почему этот плагин ресайзит так, что меня это устраивает[/quot]
Значит, клюква про "сохранение микроконтраста" - лично для Вас.
Re[c3c]:
Мне удалось выяснить почему ваш плагин не записывается в экшены.

У вас отсутствует некий ресурс в бинарнике, который называется AETE : 16000 : 1033, но который есть у всех остальных плагинов.
Вот он на скриншоте:




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





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

Re[c3c]:
вау... :D допилим?
Вы не авторизованы

Пожалуйста, авторизуйтесь, чтоб иметь доступ к полному функционалу сайта