Подсчет количества объектов, пересекаемых границей изображения в MATLAB

9

У меня есть изображение RGB с различными признаками. Моя главная цель - подсчитать знаки, которые соприкасаются с границами изображения.

Подход и проблема

Я начал с загрузки изображения [Рис. 1], затем преобразовал его в оттенки серого и применил медианный фильтр, чтобы избавиться от шума [Рис. 2]. Затем я преобразовал его в двоичную форму с пороговым значением 0,2, что привело к рисунку 3. В это время я получил свое двоичное изображение, но проблема в том, что некоторые части, принадлежащие одному и тому же знаку, появляются в разных регионах, а не только в одной. Теперь моя цель - объединить области, которые принадлежат одному и тому же объекту, и тогда я могу использовать, bwlabelчтобы подсчитать, сколько знаков на изображении, и использовать, imclearborderчтобы избавиться от тех, что на границе, и использовать bwlabelснова, чтобы получить разницу между два.

Мой подход заключается в использовании bwmorph, Dilateдля расширения объектов , а затем попытаться заполнить их imfill, holes. Но проблема в том, что если я их расширил в небольшом количестве [рис. 4], imfillкажется, не заполняет их, если я их увеличу на большое количество [Рис. 5], все объекты начинают сливаться :(

Код

img=im2double(imread('image.png')); figure, imshow(img) 
img_gray=rgb2gray(img); imshow(img_gray);                                 
img_mediana=medfilt2(img_gray, [3 3]); figure, imshow(img_mediana);       
img_bin=im2bw(img_mediana, 0.2); imshow(img_bin)
img_dilate=bwmorph(img_bin, 'Dilate', 10); imshow(img_dilate)
img_fill=imfill(img_dilate, 'Holes'); figure, imshow(img_fill)

фигуры

Рис 1 :

Рис 1 http://dl.dropbox.com/u/5272012/1.png

Рис 2 :

рис 2 http://dl.dropbox.com/u/5272012/2.png

Рис 3 :

рис 3 http://dl.dropbox.com/u/5272012/3.png

Рис 4 :

рис 4 http://dl.dropbox.com/u/5272012/4.png

Рис 5 :

рис 5 http://dl.dropbox.com/u/5272012/5.png

Руи Тровиско
источник
Мой вопрос: что именно говорит вам, что знак сломан? Как вы хотите реально поставить вывод? я имею в виду - вы просто хотите раскрасить все знаки, которые вырезаны? или вы действительно хотите перечислить каждый знак и классифицировать вырезать / заполнить?
Дипан Мехта

Ответы:

3

По моему мнению, дилатационная эрозия является очень основным инструментом. У вас очень сильная информационная база и достаточно приличное изображение для принятия таких решений.

Вот мой взгляд:

  1. Учитывая разумный успех, который вы показали, переходя от рис. 1 к 3, вы можете идентифицировать и сегментировать отдельные признаки.

  2. Предполагая, что у вас есть известные признаки ранее, вы можете применить приличные быстрые алгоритмы для сопоставления с образцом. В случае, если точные шаблоны не известны - вы можете просто определить внешнюю форму шаблона.

  3. Основываясь на классификации, вы всегда можете определить центр тяжести каждого сопоставленного рисунка и его соответствующую ширину и высоту. Если положение центроида X, Y слишком близко к границе - то есть или находится за пределами края, аналогичным образом вы можете подать заявку и на ось Y.с й н т р о я д ( х ) > я м г е ж я д т ч - ы ч р е ж я d T часаcentroid(x)<0centroid(x)>imagewidthshapewidth

  4. Учитывая, что вас интересует только то, что падает на ребро - вам следует начинать только с каждого ребра и начинать сопоставление с образцом там. Начало соответствия частичного шаблона / формы и , если парциальный шаблон / форма делает матч , что объект IS разрезаемые на крае.

Вот несколько ссылок, которые могут помочь вам правильно сформулировать проблему.

Эта статья очень полезна для понимания многих основ Знаков / токенов, с которыми вы имеете дело.

Анил К. Джайн и Адитья Вайлая Формирование на основе форм : тематическое исследование с базами данных изображений товарных знаков Распознавание образов 1998, том. 31, № 9, с. 1369-1390

Есть много элементов исследования, которые имеют дело с частичным или окклюзированным соответствием формы / образца.

Eli Sabre, Yaowu Xu, A. Murat Tekalp Распознавание частичной формы с помощью подматрицы соответствия для частичного сопоставления с ориентированной маркировкой изображения Распознавание образов 38 (2005) 1560 - 1573

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

Дипан Мехта
источник
Привет! Я не могу использовать сопоставление с образцом, потому что это займет очень много времени и слишком много вычислительной работы. Кроме того, масштаб объектов (знаков) может быть переменным (профессор дает нам случайные изображения, где масштаб знаков может очень от + 30% до -30%, поэтому сопоставление с образцом бесполезно. Мне нужен более быстрый подход в чтобы решить эту проблему
Руи Тровиско
@RuiTrovisco Я понимаю это. Вот почему я вроде как написал - я бы улучшил ответ, основываясь на ваших отзывах. Я положил некоторые комментарии на ваш вопрос. Пожалуйста, вернитесь туда.
Дипан Мехта
1

Вот небольшое вдохновение, показывающее противоположность того, что вы ищете.

Начнем с фиг3.

% Find background
labels = bwlabel(~fig3);
[n,idx] = hist(labels(:),0:max(labels(:)));
[bgrSize bgrLableIdx] = max(n);
bgr = (labels == idx(bgrLableIdx));
bgr = imopen(bgr,strel('disk',3));

% Remove border objects and cleanup
borderCleared = imclearborder(~bgr);
borderCleared = imopen(borderCleared,strel('disk',3));

введите описание изображения здесь

мола
источник