Smorodov 579 Жалоба Опубликовано December 17, 2014 Сейчас занимаюсь сбором фотографий для классификатора эмоций. Сбор ведется в автоматическом режиме. Возникает проблема измерения качества этих изображений. Что проверяется на данных момент: 1) Детектируемость лица детектором Виолы-Джонса (он же задает максимальное отклонение по углу +-20 градусов); 2) Размер лица ( размер выданной детектором рамки ); 3) Положение в кадре ( координаты этой рамки в кадре ); 4) Наличие/отсутствие засвеченных областей.(думаю через блобы или гистограммы) 5) Возможно контраст (пока не реализовал) ( как вариант через энтропию как здесь: http://areshopencv.blogspot.ru/2011/12/computing-entropy-of-image.html, но не пробовал) 6) Возможно фокусировка (пока не реализовал) ( http://www.mathworks.com/matlabcentral/fileexchange/27314-focus-measure ) Может кто-нибудь знает готовые методики, не обязательно реализованные в коде, для измерения качества изображений для подобных целей? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано December 17, 2014 Методики не знаю. Но как-то делали что-то похожее для камер охранного видеонаблюдения. Сделали примерно так: разбили кадр на 9 квадратов, в каждом из которых смотрели на характер гистограммы яркости: 1. перекос одной или нескольких в правую сторону - засветка в области; 2 все гистограммы скученны примерно в одной и той же области - проблемы с контрастом. Расфокусировку смотрели по сумме значений производной по яркости. Всё это примитивно, не сильно научно, но работало более менее точно. 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано December 17, 2014 Спасибо, разбиение на квадраты, кажется то что нужно. Выделю центр (область с лицом), и периферию. Посчитаю расстояние между гистограммами. Думаю должно работать. Проверку на засветку сделал очень просто: // ------------------------------------------------------- // Проверка на засвеченные области // ------------------------------------------------------ bool isOverexposed(Mat& src, float threshold) { Mat mask; inRange(src,Scalar::all(254),Scalar::all(255),mask); float total=src.cols*src.rows; float overexposed=countNonZero(mask); float ratio=overexposed/total; cout << "overexposed percentage =" << ratio << endl; return (ratio>threshold); } Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано December 18, 2014 Фокус можно настраивать путём вычисления границ(чем больше границ тем четче кадр), но понятно что это не универсальный метод, т.к. он не работает когда мелкие шумы или изображение без особых границ, т.е. надо настраивать порог. Например я где то на форуме описывал проблему что у меня с видео с телефона, после того как я переводил его в отдельные картинки получалось много смазанных картинок и хотелось бы эти смазанные картинки отфильтровать, а оставить только резкие (потом по ним получался point cloud). И ничего особо хорошего таким методом не получилось, хотя может быть надо было как то более хитро анализировать статистику, но это бы пришлось делать для каждого видео. А еще где то рекламке какого то продукта говорили что там из потока выделяется лицо и потом в базу заноситься его лучшая версия, если говорить о резкости и засветке, то понятно, а если просто есть набор выделенных лиц - вопрос какое положить в базу? (хотя может быть они просто кладут наиболее фронтальное) 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах