1

Я работаю над алгоритмом, который считает шаблоны (бары) определенным изображением. Мне показалось очень простым при первом взгляде, но я быстро понял сложность. Я пробовал простой порог, сопоставление шаблонов (небольшие раздвижные окна), обнаружение края ... У меня всего несколько изображений, подобных этому. поэтому я считаю, что алгоритм машинного обучения не может дать лучшие результаты! но мне все еще нужны предложения. enter image description herecounting patterns in image

+1

Вы работаете на определенном языке? которые могли бы помочь другим дать вам лучшие ответы. Я думаю, MAYBE вы можете попробовать какой-то алгоритм водораздела, возможно, использовать его с картой края. другой вариант может преобразовать изображение в двоичный и использовать расширение и эрозию для разделения баров. – andrew

+0

Спасибо за ответ. Любой язык приветствуется. Я думаю, что Matlab будет приятным. Для производства Opencv, возможно, будет лучшим. Во всяком случае, теперь это не моя сделка. Я пробовал разные алгоритмы сегментации (водораздел и край), но все же результаты очень зависят от параметров. Более опасны морфологические операции (дилатация и эрозия). некоторые ROI могут исчезнуть навсегда !. Еще раз спасибо. –

ответ

2

Я думаю, у вас достаточно данных из ваших изображений. Вам нужно обрезать из ваших изображений только столбцы. Вы получите несколько десятков маленьких изображений для каждого изображения. После этого вы можете изменить размер всех изображений до определенного предопределенного размера (например, 24X24 пикселя), используя для этого описание дескриптора, такого как HOG и SVM. Для ложных просто используйте любые другие области из ваших изображений.

+0

Спасибо за ваш ответ Амитай. У меня была аналогичная идея с соответствием шаблонов. Я попытался обрезать шаблоны (основанные на центроидах обнаруженных объектов после случайной бинаризации) и выполнить сопоставление шаблонов по градиентным величинам (HOG использует направления) и суммировать максимальные совпадения. результаты были обнадеживающими, но все еще не удовлетворены. Я попробую вашу идею с направлениями градиента HOG, возможно, с набором примеров. Я думаю, что размер шаблона будет большой проблемой для автоматизации, но я все равно попробую. Еще раз спасибо. –

0

Это может не работать во всех случаях, но поскольку это круглые столбцы, вы также можете попробовать использовать обнаружение круга. Оба matlab (find circles) и opencv (hough circle transform) поддерживают это преобразование кругового движения. Одна из проблем заключается в том, что вам нужно немного поиграть с параметрами (matlab более упрощен, чем open cv), но это касается практически любого метода.

Эти методы лучше работают с большими изображениями, поэтому я изменил ваши размеры. Вам также нужно знать радиус кругов, который нужно искать. Если ваша позиция камеры постоянна, это не должно сильно меняться. Этот код взят из страницы документации Matlab, с которой я связан. Он doensn't найти все круги, но некоторые настройки могут помочь

im = imread('http://i.stack.imgur.com/NRwUq.jpg'); 

%find circles doesn't work well on small images, I made the image 
%three times larger, if you have larger images you should use those for 
%better results 
bim = imresize(im, 3*size(im)); 

%find and display circles 
[centers, radii] = imfindcircles(bim,[8 20],'ObjectPolarity','bright',... 
    'Sensitivity',0.9); 
imshow(bim); 
h = viscircles(centers,radii); 

number_of_bars = numel(centers) 

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

enter image description here