Действительно ли там какие-либо алгоритмы доступны для анализа сложности изображения? В основном я пишу сценарий Perl, который будет использовать систему () функция для запуска MPlayer в фоновом режиме для генерации 10 - 20 снимков экрана для входного видеофайла, и я хотел бы, чтобы это смогло отбросить любые простые изображения, такие как выстрел неба, или черный фон и другие простые изображения и сохранить всего 3 из тех изображений с самой высокой сложностью или большей частью количества цветов. Существует ли модуль или отдельная программа, которую я могу использовать для выполнения этого? Я предполагаю, возможно, Изображение:: Magick может заботиться об этом.
Посмотрите, насколько мала копия, сжатая в формате JPEG. JPEG прилагает все усилия, чтобы удалить избыточность в информации об изображении, а «сложные» изображения просто не имеют такой избыточности, которую нужно удалить.
Вы можете рассмотреть возможность выполнения БПФ и поиска высокочастотной информации в изображениях... Это даст вам приблизительное представление о сложности.
Отличная статья здесь на эту тему. Она рассматривает более узкую проблему сопоставления изображений в военном приложении, но содержит обзор исследований и множество различных метрик сложности изображений, которые рассматривались различными авторами. Вполне возможно, что в вашей конкретной задаче вам понадобится только один или два метода. Посмотрите.
Я не знаю готового библиотечного метода, но есть несколько алгоритмов для измерения этого ...
Вы можете попробовать добавить увеличивайте абсолютные значения разностей одного пикселя к другому, отдельно для каждого цветового канала. Тогда победит образец изображения с наивысшим результатом. Тем не менее, это было бы очень грубым измерением ...
Бит псевдокода, поскольку я не знаю Perl:
complexity = 0
// image coordinates start at [0,0]
for x = 1 to image.max_x:
for y = 1 to image.max_y:
complexity += abs(image[x,y].red - image[x,y-1].red)
complexity += abs(image[x,y].red - image[x-1,y].red)
complexity += abs(image[x,y].blue - image[x,y-1].blue)
complexity += abs(image[x,y].blue - image[x-1,y].blue)
complexity += abs(image[x,y].green - image[x,y-1].green)
complexity += abs(image[x,y].green - image[x-1,y].green)
Моим первым ответом будет метод JPEG, но кто-то уже предложил его, поэтому следующим ответом будет вычисление гистограммы ( $ image-> Histogram ()
). Достаточно взглянуть на количество разных цветов на изображении. Для фотографий (например, неба) чем больше цветов в изображении, тем оно сложнее.