# Gnral Dveloppement > Algorithme & Mathmatiques > Traitement d'images >  sgmentation sous Matlab

## Mosoka

salut,
je travaille sur un projet de reconnaissance des caractres manuscrits, notre mthode consiste a calculer les points caractristiques (les invariants) d'un caractre( 22 points ). maintenent ce que je cherche faire est :
  "en supposant qu'on a une image qui contient plusieurs caractre manuscrits, comment faire pour isoler chaque caractre de l'image sparment, sans liminer aucun caractre ??"

j'ai pensez a la dtections des contours soit par canny ou bien segmentation en utilisons la fonctin egde ( je travail sur mathlab), mais ca va compliquer le travaille sur  surtout que je vais soutenir prochainement le projet!!
je veux seulement

----------


## Pienpien

Peux tu nous montrer un exemple de ce que tu aimerais dtecter pour connatre la qualit du fond, l'espacement entre les lettres etc

----------


## Mosoka

voici mon ami un exemple d'image : 

[ame=http://www.zshare.net/image/90785251bace6ac6/]Photo 001.jpg - 0.06MB[/ame]

----------


## DocteurV

Si j'tais  ta place, je procderais en 3 tapes :
Binariser l'image en utilisant les fonctions rgb2gray et graythreshUn peu de morphologie mathmatique du style de imdilate ou imclose pour que les branches des lettres soient toutes connexes.Labelisation des objets connexes en utilisant bwlabeln par exemple

En guise de rsultat tu devrais avoir une image labelise avec un label diffrent pour chaque lettre.

Je ne suis pas au boulot l, donc je n'ai pas matlab pour t'envoyer un script, mais si tu fouilles dans l'aide des fonctions que je t'ai donnes, tu devrais t'en sortir.

J'espre que ca t'aidera.
a+

----------


## Pienpien

```

```

Petit script simple  voir ce que tu veux exploiter et modifier.

Mais bon le truc principal ici c'est d'agrandir tes traits car ils sont trop fin et disparaissent avec le passage en noir et blanc ( la limite tu peux essayer de mettre un level  la main voir si ca marche mieux)

Aprs jouer sur l'rosion et la dilatation avec certaines formes etc te permettra de faire d'autres choses.

Toutes les donnes sont stockes dans le tableau de structure stats o tu peux facilement aller rechercher les donnes de la manire suivante :

aire=stats(1).Area;

----------


## Mr.ux

Salut,

Le filtre de Gabor est pas mal utilis pour ca : have a look (il y a meme le code matlab et un exemple d'ocr sur des caracteres chinois).

A+

----------


## Mosoka

merci d'avoir rpondu, et merci pour le script mon ami.
l'image tais juste un exemple pour illustrer  je peux modifi la clart des caractres en utilisant un feutre. Mon objectif est d'identifier un "caractre test" (qu'on va fournit comme entrer au script matlab) dans une image de caractres !

ce que je cherche est: comment isoler  chaque caractre de l'image pour calculer ces points caractristique, ensuite calculer le nombre des points d'appariements entre chaque caractre de l'image est le caractre test.

j'en ai dj le programme qui calcul les points caractristiques (program_ps.mat) et celui qui calcul le nombres des points d'appariements(find_nearest_neighbours.mat)

----------


## ToTo13

Oulala... inutile de partir sur des mthodes trop complexes.

Il tout d'abord russir  isoler chaque ligne qui contient des caractres.
Pour cela une mthode simple est d'utiliser les histogrammes de projections. L tu fais une projection horizontale. Les endroits o tu auras 0 sont les sparations entre les lignes.

Ensuite, tu refais de mme avec une projection verticale pour chacune des lignes prcdemment segmente.
Tu auras alors isol chaque caractre.

Si ton image n'est pas binaire, il te faudra alors seuiller pralablement ou faire des projections en niveaux de gris et prendre les maxima pour les sparations et non les minima.

----------


## Mosoka

la mthode dcrite au dessus est impos par l'encadrant.
any ideas ?

----------


## pseudocode

> la mthode dcrite au dessus est impos par l'encadrant.
> any ideas ?


La mthode de Toto13 reste applicable : il s'agit d'identifier les "vides" entre les caractres. D'abord rechercher des lignes vides afin de dcouper l'image en bandes horizontales. Puis, dans chaque bande, rechercher des colonnes vides afin de dcouper la bande en rectangle (qui contient normalement un seul caractre).

Sinon, il y a aussi la traditionnelle segmentation "watershed".

----------


## pretyy

> Oulala... inutile de partir sur des mthodes trop complexes.
> 
> Il tout d'abord russir  isoler chaque ligne qui contient des caractres.
> Pour cela une mthode simple est d'utiliser les histogrammes de projections. L tu fais une projection horizontale. Les endroits o tu auras 0 sont les sparations entre les lignes.
> 
> Ensuite, tu refais de mme avec une projection verticale pour chacune des lignes prcdemment segmente.
> Tu auras alors isol chaque caractre.
> 
> Si ton image n'est pas binaire, il te faudra alors seuiller pralablement ou faire des projections en niveaux de gris et prendre les maxima pour les sparations et non les minima.


Salut,
Comment peut_on choisir le seuil  pour la segmentation ::(: 
merci

----------


## ToTo13

> Salut,
> Comment peut_on choisir le seuil  pour la segmentation
> merci


Dans le cas de l'image en exemple ci-dessus, tout ce qui n'est pas nul, donc seuil  1 aprs avoir inverser l'image.
Toutefois, il y a toujours un lger dgrad difficilement perceptible. Alors dans des images aussi facile, on prend un seuil mdian du type 128. Sinon on augmente le contraste avant de seuiller.

----------

