J'ai une image RVB avec divers signes. Mon objectif principal est de compter les signes en contact avec les bordures de l'image.
Approche et problème
J'ai commencé par charger l'image [Fig. 1], puis converti en niveaux de gris et appliqué un filtre médian pour se débarrasser de certains bruits [Fig. 2]. Ensuite, je l'ai binarisé avec un seuil de 0,2, ce qui a donné la figure 3. À ce moment, j'ai obtenu mon image binarisée, mais le problème est que certaines parties qui appartiennent au même signe apparaissent dans différentes régions, au lieu d'une seule. Maintenant, mon objectif est de fusionner les régions qui appartiennent au même objet, donc je pourrais utiliser bwlabel
pour compter le nombre de signes dans l'image, et utiliser imclearborder
pour se débarrasser de ceux de la frontière, et réutiliser bwlabel
pour obtenir la différence entre les deux.
Mon approche était d'utiliser bwmorph
, Dilate
pour dilater les objets et ensuite essayer de les remplir imfill
, holes
. Mais le problème est que si je les dilate en petite quantité [Fig. 4], le imfill
ne semble pas les remplir, si je les dilate beaucoup [Fig 5] tous les objets commencent à fusionner :(
Code
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)
Les figures
Fig 1 :
Fig 1 http://dl.dropbox.com/u/5272012/1.png
Fig 2 :
fig 2 http://dl.dropbox.com/u/5272012/2.png
Fig 3 :
fig 3 http://dl.dropbox.com/u/5272012/3.png
Fig 4 :
fig 4 http://dl.dropbox.com/u/5272012/4.png
Fig 5 :
la source
Réponses:
À mon avis, l'érosion par dilatation est un outil très basique. Vous disposez d'une base d'informations très solide et d'une image d'entrée assez décente pour prendre de telles décisions.
Voici mon point de vue:
Étant donné un succès raisonnable que vous avez montré pour passer des figures 1 à 3, vous pouvez identifier et segmenter les signes individuels.
En supposant que vous ayez déjà connu des signes, vous pouvez appliquer des algorithmes rapides décents pour effectuer une correspondance de modèle. Dans le cas où les motifs exacts ne sont pas connus, vous pouvez simplement identifier la forme extérieure du motif.
Étant donné que vous ne vous préoccupez que de ce qui tombe sur le bord, vous devez commencer par chaque bord uniquement et commencer la correspondance de modèle à cet endroit. Commencez à faire correspondre le motif / la forme partielle et si le motif / la forme partielle correspond à cet objet EST coupé sur le bord.
Voici quelques références qui pourraient vous aider à bien formuler le problème.
Ce document est très utile pour comprendre de nombreuses notions de base sur les signes / jetons avec lesquels vous traitez.
Anil K. Jain et Aditya Vailaya Shape-Based Retrieval: A Case Study with Trademark Image Databases Pattern Recognition 1998, vol. 31, no9, p. 1369-1390
Il existe de nombreux éléments de recherche qui traitent de la correspondance partielle ou occluse des formes et des motifs.
Eli Saber, Yaowu Xu, A. Murat Tekalp Reconnaissance de forme partielle par correspondance de sous-matrice pour l'étiquetage d'image guidée par correspondance partielle Reconnaissance de formes 38 (2005) 1560 - 1573
Développera cette réponse pour des requêtes plus spécifiques si vous adoptez cette approche.
la source
Voici une petite inspiration montrant le contraire de ce que vous recherchez.
Commencez avec fig3.
la source