У меня есть изображение 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 :
источник
Ответы:
По моему мнению, дилатационная эрозия является очень основным инструментом. У вас очень сильная информационная база и достаточно приличное изображение для принятия таких решений.
Вот мой взгляд:
Учитывая разумный успех, который вы показали, переходя от рис. 1 к 3, вы можете идентифицировать и сегментировать отдельные признаки.
Предполагая, что у вас есть известные признаки ранее, вы можете применить приличные быстрые алгоритмы для сопоставления с образцом. В случае, если точные шаблоны не известны - вы можете просто определить внешнюю форму шаблона.
Основываясь на классификации, вы всегда можете определить центр тяжести каждого сопоставленного рисунка и его соответствующую ширину и высоту. Если положение центроида X, Y слишком близко к границе - то есть или находится за пределами края, аналогичным образом вы можете подать заявку и на ось Y.с й н т р о я д ( х ) > я м г е ж я д т ч - ы ч р е ж я d T часаcentroid(x)<0 centroid(x)>imagewidth−shapewidth
Учитывая, что вас интересует только то, что падает на ребро - вам следует начинать только с каждого ребра и начинать сопоставление с образцом там. Начало соответствия частичного шаблона / формы и , если парциальный шаблон / форма делает матч , что объект IS разрезаемые на крае.
Вот несколько ссылок, которые могут помочь вам правильно сформулировать проблему.
Эта статья очень полезна для понимания многих основ Знаков / токенов, с которыми вы имеете дело.
Анил К. Джайн и Адитья Вайлая Формирование на основе форм : тематическое исследование с базами данных изображений товарных знаков Распознавание образов 1998, том. 31, № 9, с. 1369-1390
Есть много элементов исследования, которые имеют дело с частичным или окклюзированным соответствием формы / образца.
Eli Sabre, Yaowu Xu, A. Murat Tekalp Распознавание частичной формы с помощью подматрицы соответствия для частичного сопоставления с ориентированной маркировкой изображения Распознавание образов 38 (2005) 1560 - 1573
Развернем этот ответ для более конкретных запросов, если вы воспользуетесь этим подходом.
источник
Вот небольшое вдохновение, показывающее противоположность того, что вы ищете.
Начнем с фиг3.
источник