Бинаризация изображений / Прикладные вопросы распознавания образов / Recog.ru - Распознавание образов для программистов


Бинаризация изображений

Бинаризация изображений, т.е. перевод полноцветного или в градациях серого изображения в монохромное, где присутствуют только два типа пикселей (темные и светлые) имеет большое значение при распознавании образов. Особенно это относится к бинарным объектам, таким, как штриховые коды, текст, чертежи и т.п. Существуют различные подходы к бинаризации, которые условно можно разделить на 2 группы:
  • пороговые;
  • адаптивные.
Если говорить кратко, то пороговые методы бинаризации работают со всем изображением, находя какую-то характеристику (порог), позволяющую разделить все изображение на чёрное и белое. Адаптивные методы работают с участками изображений и используются при неоднородном освещении объектов. Рассмотрим далее, как работают методы бинаризации на примере изображения, представленного на рисунке 1.

         Рис. 1. Исходное изображение

Обычно сначала изображение переводится в градации серого (функция cvCvtColor в OpenCV – здесь и далее подразумевается, что программа написана при использовании библиотеки OpenCV), а затем выбирается порог яркости. Например, ниже выбран порог 128 яркости:
cvThreshold(frame1, frame1, 128, 255, CV_THRESH_BINARY);

Результат бинаризации представлен на рисунке 2.

         Рис. 2. Бинаризация с порогом яркости 128

Понятно, что каждый раз вручную для каждого изображения подбирать свой порог яркости неудобно. Для этого существуют различные критерии бинаризации, например, Отсу, Бернсена, Эйквеля, Ниблэка и т.п. Самым эффективным, как по быстродействию, так и по качеству, считается критерий Отсу. Так, для изображения на рисунке 1, критерий Отсу выдал значение оптимального порога яркости равное 104 (Рис. 3).

         Рис. 3. Бинаризация с использованием критерия Отсу

Как видно из рисунка 3, критерий Отсу необходимо использовать с умом. На исходном изображении слишком много темных мест, поэтому порог сдвинулся в тёмную сторону, и в результате шахматная доска почти полностью стала белого цвета. Если бы анализировалось не всё изображение, а только область доски, то результаты, конечно, были бы другими.
До этого рассматривалась пороговая бинаризация при работе с серым изображением, но ведь можно работать и с полноцветным. Так ниже представлен код функции, который работает с 24-битным изображением, преобразуя его в 8-битное бинаризованное.
void Threshold(IplImage* Image,IplImage* gray,CvRect Rect)
{	
	uchar* ptr1;
	ptr1 = (uchar*) (Image->imageData );
	uchar* ptr2;
	ptr2 = (uchar*) (gray->imageData );
	int i,j;
	for(i=0;i<Rect.height;i++)
		for(j=0;j<Rect.width;j++)
		{
			
			if (ptr1[(Rect.x+j)*3+0+(Rect.y+i)*Image->widthStep]>100 && ptr1[(Rect.x+j)*3+1+(Rect.y+i)*Image->widthStep]>140)
					ptr2[j+i*gray->widthStep]=255;
			else				
				ptr2[j+i*gray->widthStep]=0;
		}
}

Результат работы функции представлен на рисунке 4. Порог выбран экспериментально (см. условие сравнения ptr1).

         Рис. 4. Пороговая бинаризация по 24-битному изображению

Среди адаптивных подходов к бинаризации следует отметить подходы, реализованные в функции cvAdaptiveThreshold библиотеки OpenCV. Описание функции приведено ниже.
void cvAdaptiveThreshold( 
	const CvArr* src, 
	CvArr* dst, 
	double max_value,
	int adaptive_method=CV_ADAPTIVE_THRESH_MEAN_C,
	int threshold_type=CV_THRESH_BINARY,
	int block_size=3, 
	double param1=5 
);


Параметры:
src
Исходное изображение.
dst
Конечное изображение.
max_value
Максимальное значение используемое только с CV_THRESH_BINARY и CV_THRESH_BINARY_INV (ставьте 255).
adaptive_method
Метод CV_ADAPTIVE_THRESH_MEAN_C или CV_ADAPTIVE_THRESH_GAUSSIAN_C.
threshold_type
CV_THRESH_BINARY или CV_THRESH_BINARY_INV.
block_size
Размер окрестностей пикселя, используемых для вычисления порогового значения (3, 5, 7…).
param1
Параметр, зависимый от метода. Для CV_ADAPTIVE_THRESH_MEAN_C и CV_ADAPTIVE_THRESH_GAUSSIAN_C это константа, вычитаемая из среднего значения.
Функция cvAdaptiveThreshold преобразует изображение в градациях серого к монохромному изображению согласно формулам:


где T(x, y) – порог, рассчитываемый индивидуально для каждого пикселя.
Для метода CV_ADAPTIVE_THRESH_MEAN_C – среднее из block_size × block_size соседних пикселей минус param1.
Для метода CV_ADAPTIVE_THRESH_GAUSSIAN_C – это весовая сумма (Гауссиан) из block_size × block_size соседних пикселей минус param1.
На рисунках 5-8 представлены результаты для различных параметров функции.

         Рис. 5. Адаптивное монохромное преобразование (CV_ADAPTIVE_THRESH_MEAN_C, block_size =3, param1=0)


         Рис. 6. Адаптивное монохромное преобразование (CV_ADAPTIVE_THRESH_ GAUSSIAN _C, block_size =3, param1=0)


         Рис. 7. Адаптивное монохромное преобразование (CV_ADAPTIVE_THRESH_MEAN_C, block_size =25, param1=0)


         Рис. 8. Адаптивное монохромное преобразование (CV_ADAPTIVE_THRESH_ GAUSSIAN _C, block_size =25, param1=0)

Хотелось бы объединить достоинства методов с пороговой и адаптивной бинаризацией. И существует ряд решений для этого. Суть их состоит в том, чтобы с помощью пороговой бинаризации выделить три группы пикселей – белые, чёрные и промежуточные. А уже промежуточные пиксели с помощью адаптивной бинаризации относятся к черному или белому. Результат работы одного такого решения представлен на рисунке 9.

         Рис. 9. Совмещение подходов адаптивной и пороговой бинаризации

Выбираемый подход бинаризации часто зависит от изображений, которые необходимо распознавать. Например, при распознавании неравномерно освещенного текста можно воспользоваться адаптивными функциями с размерами блоков, превышающими максимальный размер ячейки символа. При этом адаптивные методы бинаризации работают медленнее пороговых, что также влияет на выбор метода.
  • +1
  • 14 июня 2011, 10:52
  • vidikon

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.