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