Précédent   Forum des professionnels en informatique > Environnements de développement > MATLAB > Images
Images Forum d'entraide sur le traitement d'images en MATLAB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/01/2012, 18h42   #1
Nouveau Membre du Club
 
Inscription : novembre 2011
Messages : 60
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 60
Points : 26
Points : 26
Par défaut [kmeans] Seuillage

salut

je veux appliquer k-means pour le seuillage

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13

I= imread('img.jpg');
X=I;
% k-means clustering
k=2; % nombre de groupes 
nb=3; % nbre de réitération
[m n]=size(X);
X=reshape(X,m*n,1);
[clusterIdx clusterCtr]=kmeans(X,k,'distance', 'sqEuclidean', 'Replicates', nb);
% l'affichage
clusterlabel=reshape(clusterIdx, m, n);
imshow(clusterlabel, []);
mais j'ai obtenu cette erreur

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
??? Error using ==> minus
Integers can only be combined with integers of the same
class, or scalar doubles.

Error in ==> kmeans>onlineUpdate at 576
            Del(:,i) = (m(i) ./ (m(i) + sgn)) .* sum((X -
            C(repmat(i,n,1),:)).^2, 2);

Error in ==> kmeans at 341
            converged = onlineUpdate();

Error in ==> tester1 at 12
[clusterIdx clusterCtr]=kmeans(X,k,'distance',
'sqEuclidean', 'Replicates', nb);
math_infomatique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 19h31   #2
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 598
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 598
Points : 6 829
Points : 6 829
Bonjour,

Ta matrice obtenue avec IMREAD est de type UINT8, et c'est ce qui pose problème.
Il te faut la convertir en double au préalable.
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 09h49   #3
Nouveau Membre du Club
 
Inscription : novembre 2011
Messages : 60
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 60
Points : 26
Points : 26
Citation:
Envoyé par Winjerome Voir le message
Bonjour,

Ta matrice obtenue avec IMREAD est de type UINT8, et c'est ce qui pose problème.
Il te faut la convertir en double au préalable.
ouii ça marche merci


mais j'ai remarqué un truc avec les méthodes prédéfinies de Matlab, elles ne donnent pas de bons résultats!!
j'ai voulu faire un seuillage automatique alors j'ai testé Otsu par graythresh et k-means par kmeans
le résultat est mauvais

peux tu m expliquer pourquoi ?
math_infomatique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 17h34   #4
Modérateur
 
Inscription : août 2007
Messages : 3 579
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 3 579
Points : 4 405
Points : 4 405
Citation:
Envoyé par math_infomatique Voir le message
mais j'ai remarqué un truc avec les méthodes prédéfinies de Matlab, elles ne donnent pas de bons résultats!!
j'ai voulu faire un seuillage automatique alors j'ai testé Otsu par graythresh et k-means par kmeans
le résultat est mauvais
C'est le problème de ce genre de méthode : il n'existe pas de méthode universelles. Le résultat dépend de tes images et de ce que tu cherches à l'intérieur. Sans cela, il sera difficile de t'indiquer une méthode adéquate...
__________________
Pour une bonne utilisation des balises code c'est ici!
Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


La nature est un livre écrit en langage mathématique. Galilée.
magelan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 18h41   #5
Nouveau Membre du Club
 
Inscription : novembre 2011
Messages : 60
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 60
Points : 26
Points : 26
Citation:
Envoyé par magelan Voir le message
C'est le problème de ce genre de méthode : il n'existe pas de méthode universelles. Le résultat dépend de tes images et de ce que tu cherches à l'intérieur. Sans cela, il sera difficile de t'indiquer une méthode adéquate...
mmm je vois
alors peut être je dois les implémenter et voir si ça peut me donner un meilleur résultat !!

je vais commencer par écrire un code pour Otsu et un pour Kmeans
math_infomatique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 19h06   #6
Nouveau Membre du Club
 
Inscription : novembre 2011
Messages : 60
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 60
Points : 26
Points : 26
voilà j'ai écrit le code de Otsu
mais toujours le même résultat que la méthode de graythresh

qu 'en pensez vous du code ??

sinon je suis entrain de tester les différentes méthodes possibles du seuillage et j'essaie de faire une comparaison entre elles !!!

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

% *** Otsu sans méthode prédefinie 
I=rgb2gray(I);
h= imhist(I);
[n m]=size(I);
ntotal=n*m;
sum=0;
for i=1:256
    sum=sum+((i-1)*h(i));
end
sumB=0; wb=0; wf=0; varMax=0; threshold=0;
for t=1:256
    wb=wb+h(t);
    wf=ntotal-wb;
    sumB=sumB+((t-1)*h(t));
    mb=sumB/wb; 
    mf=(sum-sumB)/wf;  % moyenne
    var=wb*wf*(mb-mf)*(mb-mf);
    if var>varMax
        varMax=var; 
        threshold=t-1;
    end
end

%binarisation
I1 = zeros(size(I));
I1(I<threshold) = 0;
I1(I>threshold) = 255;
imshow(I1);
math_infomatique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 19h38   #7
Modérateur
 
Inscription : août 2007
Messages : 3 579
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 3 579
Points : 4 405
Points : 4 405
Citation:
Envoyé par math_infomatique Voir le message
voilà j'ai écrit le code de Otsu
mais toujours le même résultat que la méthode de graythresh
Si tu as codé exactement la même méthode, tu obtiendras exactement le même résultat puisque le seuil est calculé en fonction des valeurs de ton image...

On ne pourra pas t'aider beaucoup plus si tu ne nous expliques pas le contexte, ce que tu cherches et les résultats que tu as obtenus avec tes tests (avec des images par exemple).
__________________
Pour une bonne utilisation des balises code c'est ici!
Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


La nature est un livre écrit en langage mathématique. Galilée.
magelan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 20h15   #8
Nouveau Membre du Club
 
Inscription : novembre 2011
Messages : 60
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 60
Points : 26
Points : 26
Citation:
Envoyé par magelan Voir le message
Si tu as codé exactement la même méthode, tu obtiendras exactement le même résultat puisque le seuil est calculé en fonction des valeurs de ton image...

On ne pourra pas t'aider beaucoup plus si tu ne nous expliques pas le contexte, ce que tu cherches et les résultats que tu as obtenus avec tes tests (avec des images par exemple).
oui t as raison !!
je m excuse

alors je travaille sur des images échographiques pour détecter la tumeur

voilà les images avant et apres application seuillage ostu
Images attachées
Type de fichier : jpg tum3.jpg (5,9 Ko, 9 affichages)
Type de fichier : jpg ostu.JPG (17,5 Ko, 6 affichages)
math_infomatique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2012, 21h59   #9
Membre éprouvé
 
Homme Bertrand
Inscription : octobre 2008
Messages : 329
Détails du profil
Informations personnelles :
Nom : Homme Bertrand
Localisation : France

Informations forums :
Inscription : octobre 2008
Messages : 329
Points : 456
Points : 456
Salut,
Quelle différence entre ce que tu obtiens et ce que tu souhaite obtenir?
La tumeur est-elle la forme arrondie que l'on distingue en bas de l'image ( le truc qui semble pousser à l'intérieur de la cavité en noir ) ?
__________________
bertry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2012, 17h09   #10
Nouveau Membre du Club
 
Inscription : novembre 2011
Messages : 60
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 60
Points : 26
Points : 26
Citation:
Envoyé par bertry Voir le message
Salut,
Quelle différence entre ce que tu obtiens et ce que tu souhaite obtenir?
La tumeur est-elle la forme arrondie que l'on distingue en bas de l'image ( le truc qui semble pousser à l'intérieur de la cavité en noir ) ?
oui c'est la forme arrondie qui représente la tumeur !!
oui peut être le résultat n'est pas aussi mauvais..
j'ai donné le mauvais exemple

bon voilà deux autres cas où j'ai appliqué les deux méthode Otsu et kmeans :

le premier pour un cancer du colon, le résultat n'est pas mauvais
mais pour le 2eme cas cancer du sein le résultat est mauvais !!

donc j'ai remarqué que ces méthodes ne donnent pas forcément un bon résultat..
Images attachées
Type de fichier : jpg cancer colon.jpg (16,3 Ko, 9 affichages)
Type de fichier : jpg conlon.JPG (20,6 Ko, 5 affichages)
Type de fichier : jpg m.jpg (43,8 Ko, 4 affichages)
Type de fichier : jpg Capture.JPG (16,6 Ko, 4 affichages)
math_infomatique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2012, 20h38   #11
Membre du Club
 
Femme
Étudiant
Inscription : mars 2009
Messages : 151
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2009
Messages : 151
Points : 57
Points : 57
j'ai rencontré le même problème.. le seuillage otsu ne donne pas un résultat pour mes images

regardes ici ça peut t'aider
azertyuio est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/01/2012, 14h43   #12
Nouveau Membre du Club
 
Inscription : novembre 2011
Messages : 60
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 60
Points : 26
Points : 26
oui ça marche
mais c'est une autre méthode ?! entropique


donc conclusion
chaque image a ses propres spécifications et les méthodes de seuillages ne sont pas universelles pour toutes les images...
math_infomatique est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h44.


 
 
 
 
Partenaires

Hébergement Web