2010-12-05 3 views
1

Я столкнулся с какой-то неприятной проблемой с моим рекордером. Некоторые люди все еще используют его с аналоговыми тюнерами, а аналоговые тюнеры имеют тенденцию выплевывать «снег», если нет сигнала.Расчет энтропии фотографии

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

Итак, идея заключается в создании «энтропийного детектора» - простой и малой подпрограммы, которая будет проходить через данные буфера кадра и вычислять индекс энтропии, то есть как данные на картинке на самом деле случайны.

Результатом этой процедуры будет число, которое будет 0 для полного обратного изображения, и 1 для абсолютно случайного изображения - снег, то есть.

Рутина сама по себе должна быть только для сканирования вперед, с несколькими локальными переменными, которые прекрасно вписываются в регистры.

Я мог бы использовать zlib или 7z api для такой задачи, но я действительно хотел бы что-нибудь приготовить самостоятельно.

Любые идеи?

+6

Я думаю, что первый вопрос должен быть «почему ваш кодер не может обрабатывать какой-либо допустимый ввод». – ybungalobill 2010-12-05 10:05:27

+0

Я использую windows media encoder, и я ничего не могу там сделать, но стараюсь не слишком комбинировать его с вещами, которые он не может или может обрабатывать с большими трудностями. А также мы все знаем, что шум - это проблема для любых алгоритмов сжатия. – 2010-12-05 11:32:30

ответ

2

PNG работает таким образом (приблизительно): для каждого пикселя замените его значение на значение, которое оно имеет за вычетом значения пикселя. Сделайте это справа налево.

Затем вы можете вычислить энтропию (бит на символ), создав таблицу того, как часто это значение появляется сейчас, делая относительные значения из этих абсолютных и добавляя результаты log2 (n) * n для каждого элемента.

О, и вам нужно сделать это для каждого цветного канала (r, g, b) отдельно.

Для результата возьмите среднее число бит на символ для каналов и разделите его на 2^8 (при условии, что у вас есть 8 бит на цвет).

Смежные вопросы