Оценка качества изображения по отношению к сжатию?

У меня есть изображения, которые я использую для задачи компьютерного видения. Задача чувствительна к качеству изображения. Я хотел бы удалить все изображения, которые ниже определенного порога, но я не уверен, есть ли какой-либо метод/эвристика для автоматического обнаружения изображений, которые сильно сжаты через JPEG. У кого-нибудь есть идея?

Ответ 1

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

  • Поскольку вы упоминаете JPEG, есть две основные функции деградации, которые проявляются в JPEG-сжатых изображениях: блокировка и размытие
  • Показатели оценки качества без эталонного изображения обычно ищут эти две функции.
  • Блокировка довольно легко подобрать, поскольку она отображается только на границах макроблока. Макроблоки фиксированного размера - 8x8 или 16x16 в зависимости от того, что изображение было закодировано с помощью
  • Размытие немного сложнее. Это происходит потому, что более высокие частоты изображения уменьшены (удалены). Вы можете разбить изображение на блоки, DCT (дискретное косинусное преобразование) на каждый блок и посмотреть на высокочастотные компоненты результата DCT. Если для большинства блоков отсутствуют высокочастотные компоненты, вы, вероятно, смотрите на размытое изображение.
  • Другой подход к обнаружению размытия - это измерение средней ширины ребер изображения. Выполните определение края Sobel на изображении, а затем измерьте расстояние между локальными минимумами/максимумами с каждой стороны края. Google для "Безрецидивной метрики восприятия размытия" Марзилиано - это известный подход. "No Detect Block Blur Detection" из Debing - это более поздняя статья

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

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

Google Scholar - действительно ваш друг здесь. Хотел бы я дать вам конкретное решение, но у меня его еще нет - если бы я это сделал, я был бы очень успешным студентом-магистром.

UPDATE:

Просто подумал о другой идее: для каждого изображения повторно сжимайте изображение с помощью JPEG и изучите изменение размера файла до и после повторного сжатия. Если размер файла после повторного сжатия значительно меньше, чем раньше, то, скорее всего, изображение не сильно сжато, поскольку оно содержит некоторые существенные детали, которые были удалены с помощью повторного сжатия. В противном случае (очень небольшое различие или размер файла после повторного сжатия больше), вероятно, изображение сильно сжато.

Использование настройки качества во время повторного сжатия позволит вам определить, что именно сильно сжато.

Если вы работаете в Linux, это не должно быть слишком сложно реализовать с помощью утилиты bash и imageMagick convert.

Вы можете попробовать другие варианты этого подхода:

  • Вместо сжатия JPEG попробуйте другую форму деградации, например, гауссовское размытие
  • Вместо простого сравнения размеров файлов попробуйте полную ссылочную метрику, такую ​​как SSIM - там реализована реализация OpenCV свободно доступен. Другие реализации (например, Matlab, С#) также существуют, поэтому осмотритесь.

Сообщите мне, как вы идете.

Ответ 2

У меня было много фотографий, снятых в древней книге (так похожий макет, две страницы на изображение), но некоторые были сильно размыты до такой степени, что текст не мог быть прочитан. Я искал готовый пакет script, чтобы найти наиболее размытый, но я не нашел ничего полезного, поэтому я использовал другую часть script, полученную в сети (на основе ImageMagick, но больше не работает; Я не мог получить автора за кредиты!), Полезный для оценки уровня размытости одного изображения, его настройки и автоматизации по всей папке. Я загрузил здесь:

https://gist.github.com/888239

надеясь, что это будет полезно для кого-то другого. Он работает в системе Linux и использует ImageMagick (и некоторые обычно установленные в командной строке инструменты, такие как gawk, sort, grep и т.д.).

Ответ 3

Одной простой эвристикой может быть просмотр width * height * color depth < sigma * file size. Разумеется, вам нужно будет определить хорошее значение для sigma. sigma будет зависеть от ожидаемой энтропии изображений, на которые вы смотрите.