Перейти к содержимому
Compvision.ru
Smorodov

Измерение качества изображения.

Recommended Posts

Сейчас занимаюсь сбором фотографий для классификатора эмоций.

 

Сбор ведется в автоматическом режиме.

 

Возникает проблема измерения качества этих изображений.

 

Что проверяется на данных момент:

 

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 )

 

Может кто-нибудь знает готовые методики, не обязательно реализованные в коде, для измерения качества изображений для подобных целей? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Методики не знаю. Но как-то делали что-то похожее для камер охранного видеонаблюдения.

Сделали примерно так: разбили кадр на 9 квадратов, в каждом из которых смотрели на характер гистограммы яркости:

1. перекос одной или нескольких в правую сторону - засветка в области;

2 все гистограммы скученны примерно в одной и той же области - проблемы с контрастом.

 

Расфокусировку смотрели по сумме значений производной по яркости.

 

Всё это примитивно, не сильно научно, но работало более менее точно.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо, разбиение на квадраты, кажется то что нужно.

Выделю центр (область  с лицом), и периферию.

Посчитаю расстояние между гистограммами.

Думаю должно работать.

 

Проверку на засветку сделал очень просто:

// -------------------------------------------------------
// Проверка на засвеченные области
// ------------------------------------------------------
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);
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Например я где то на форуме описывал проблему что у меня с видео с телефона, после того как я переводил его в отдельные картинки получалось много смазанных картинок и хотелось бы эти смазанные картинки отфильтровать, а оставить только резкие (потом по ним получался point cloud).

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

 

А еще где то рекламке какого то продукта говорили что там из потока выделяется лицо и потом в базу заноситься его лучшая версия, если говорить  о резкости и засветке, то понятно, а если просто есть набор выделенных лиц - вопрос какое положить в базу? (хотя может быть они просто кладут наиболее фронтальное)

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×