У меня есть изображение 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 :