Підрахунок кількості об'єктів, перетинаних межею зображення в 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.centroid(x)<0centroid(x)>imagewidthshapewidth

  4. Враховуючи, що вас турбує лише те, що падає на край - вам слід починати лише з кожного краю і починати там відповідність шаблону. Початок відповідності часткового шаблону / форми і , якщо парціальний шаблон / форма робить матч , що об'єкт IS розрізаються на краї.

Ось кілька посилань, які можуть допомогти вам сформулювати проблему добре.

Цей документ дуже добре зрозуміти багато основ знаків / жетонів, з якими ви маєте справу.

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

Існує багато дослідницьких елементів, які стосуються часткового чи оклюзійного узгодження форми / візерунка.

Елі Сабер, Яову Сю, А. Мурат Текалп Часткове розпізнавання фігури за допомогою підматричного узгодження для часткового узгодження маркованих керованих зображень Розпізнавання візерунків 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));

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.