Opencv: 2D обнаружение штрих-кода (матрицы данных)

Я работаю над обнаружением 2D штрих-кода на печатной плате. Среда Visual Studio 2012.

Мы столкнулись с некоторыми проблемами и не можем успешно отфильтровать 2D-изображение штрих-кода.

Загрузка рисунка: Исходное изображение Размер 1600 * 1200.

После того как мы загрузим рисунок и начнем серию обработки, выполните следующие шаги:

1. Нахождение порогового значения методом автопорога.

2. Делаем бинарный порог к изображению.

3. Делаем открытие, чтобы сделать изображение чётким.

Открытие:
dst = открыть (источник, элемент) = расширить (разрушить (источник, элемент))

4. Отфильтруйте прямоугольник, кроме квадратов.
Тогда мы можем получить коллекцию квадратов.
Как показано на следующем рисунке, после шагов 1-4 мы можем найти квадраты на изображении.

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

5.1 Рассчитать гистограмму

void calcHist (const Mat * изображения, изображения,
каналы const int *, маска InputArray,
OutputArray hist, int dims, const int * histSize,
const float ** диапазоны, bool равно = true, bool накапливается = false);

5.2 Нормализовать диапазон значений массива

нормализация пустоты (InputArray src, OutputArray dst, двойная альфа = 1, двойная бета = 0,
int norm_type = NORM_L2, int dtype = -1, InputArray mask = noArray ());

5.3 Сравнить две гистограммы с корреляцией.

double compareHist (InputArray H1, InputArray H2, CV_COMP_CORREL);

6. После обработки мы не можем отфильтровать правильное изображение из квадратной коллекции.

6.1 Мы скорректировали интервалы гистограммы с 256 до 64/32, но результаты без робастности, значения корреляции очень низкие, даже меньше 0,5.

6.2. Мы также пытаемся использовать EMD (расстояние от Earth Mover), чтобы оценить сходство двух квадратов, и это не решает эту проблему.

[[Вопрос]]:
Можно ли поделиться с нами некоторыми предложениями по улучшению нашего метода обнаружения?

0

Решение

Почему бы не использовать библиотеки?

модуль datamatrix opencv

ZXING Cpp

libdmtx

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

1

Другие решения


По вопросам рекламы [email protected]