Алгоритм определения наилучшего формата сохранения изображений

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

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

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

У кого-нибудь есть предложения?


person nikeee    schedule 22.09.2012    source источник
comment
Откуда этот образ? В каком формате он хранится, т.е. какой тип ввода для метода, который вы пытаетесь написать?   -  person Darin Dimitrov    schedule 22.09.2012
comment
Альфа не будет содержаться ни на фотографии, ни на скриншоте.   -  person Mark Ransom    schedule 22.09.2012
comment
@Отметьте, что скриншоты, о которых я говорю, могут содержать альфу.   -  person nikeee    schedule 22.09.2012
comment
Что, если это снимок экрана программы просмотра изображений, содержащий фотографию?   -  person Nick Johnson    schedule 05.10.2012
comment
@MarkRansom И было бы уместно сохранить альфа-канал и с DCT [маски прозрачной пленки...]   -  person user877329    schedule 13.08.2015


Ответы (1)


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

person Dan Bryant    schedule 22.09.2012
comment
Существует ли широко используемый алгоритм для анализа изображения таким образом? - person nikeee; 22.09.2012
comment
@ nikeee13, я не знаком со стандартным алгоритмом для этого, но, вероятно, достаточно выполнить выборку по строкам и подсчитать последовательные одинаковые пиксели. Если вы когда-нибудь превысите пороговое значение, отметьте это как не фото. Вы можете проявить больше изобретательности в своих измерениях и, возможно, вычислить некоторую статистику, но даже простое обнаружение пяти пикселей подряд является довольно хорошим показателем того, что это не фотография (даже если игнорировать градиенты освещения на фотографируемых поверхностях, шум ПЗС обычно вызывает дизеринг, по крайней мере). порядка 1 единицы яркости.) - person Dan Bryant; 22.09.2012