Анализ сложности изображения - PullRequest
6 голосов
/ 10 марта 2010

Есть ли алгоритмы для анализа сложности изображения? В основном я пишу Perl-скрипт, который будет использовать функцию system () для запуска MPlayer в фоновом режиме, чтобы генерировать от 10 до 20 снимков экрана для входного видеофайла, и я хотел бы, чтобы он мог отбрасывать любые простые изображения, такие как снимок неба, или черный фон, и другие простые изображения и сохраните только 3 из этих изображений с самой высокой сложностью или большим количеством цветов. Есть ли модуль или отдельная программа, которую я могу использовать для этого? Я предполагаю, что Image :: Magick может позаботиться об этом.

Ответы [ 5 ]

10 голосов
/ 10 марта 2010

Посмотрите, насколько мала JPEG-сжатая копия. JPEG усердно работает над устранением избыточности в информации об изображении, а «сложные» изображения просто не имеют такой избыточности для удаления.

3 голосов
/ 11 марта 2010

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

1 голос
/ 11 марта 2010

Моим первым ответом был бы метод JPEG, но кто-то уже предлагал его, поэтому мой следующий ответ - вычисление гистограммы ($image->Histogram()). Достаточно взглянуть на количество разных цветов на изображении. Для фотографий (таких как небо), чем больше цветов в изображении, тем сложнее оно.

0 голосов
/ 10 марта 2010

Я не знаю готового библиотечного метода, но есть некоторые алгоритмы для измерения этого ...

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

Бит псевдокода, так как я не знаю 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)
0 голосов
/ 10 марта 2010

Вы можете подумать о БПФ и поиске высокочастотной информации на изображениях ... Это даст вам общее представление о сложности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...