Wie rufe ich Textur mit GLCM ab und klassifiziere mit SVM Classifier?

12

Ich arbeite an einem Projekt zur Segmentierung und Klassifizierung von Lebertumoren. Ich habe Region Growing und FCM für die Segmentierung von Leber und Tumor verwendet. Dann verwendete ich eine Graustufen-Koexistenzmatrix zur Extraktion von Texturmerkmalen. Ich muss Support Vector Machine für die Klassifizierung verwenden. Ich weiß aber nicht, wie ich die Merkmalsvektoren normalisieren soll, damit ich sie als Eingabe für die SVM verwenden kann. Kann jemand sagen, wie man es in Matlab programmiert?

Dem GLCM-Programm gab ich das tumorsegmentierte Bild als Eingabe. Habe ich recht? Wenn ja, denke ich, dann wird meine Ausgabe auch korrekt sein.

Soweit ich es versucht habe, ist meine GLCM-Codierung:

I = imread('fzliver3.jpg');
GLCM = graycomatrix(I,'Offset',[2 0;0 2]);
stats = graycoprops(GLCM,'all')
t1= struct2array(stats)


I2 = imread('fzliver4.jpg');
GLCM2 = graycomatrix(I2,'Offset',[2 0;0 2]);
stats2 = graycoprops(GLCM2,'all')
t2= struct2array(stats2)

I3 = imread('fzliver5.jpg');
GLCM3 = graycomatrix(I3,'Offset',[2 0;0 2]);
stats3 = graycoprops(GLCM3,'all')
t3= struct2array(stats3)

t=[t1,t2,t3]
xmin = min(t); xmax = max(t);
scale = xmax-xmin;
tf=(x-xmin)/scale

War das eine korrekte Implementierung? Außerdem erhalte ich in der letzten Zeile einen Fehler.

Meine Ausgabe ist:

stats = 

   Contrast: [0.0510 0.0503]
Correlation: [0.9513 0.9519]
     Energy: [0.8988 0.8988]
Homogeneity: [0.9930 0.9935]
t1 =

Columns 1 through 6

0.0510    0.0503    0.9513    0.9519    0.8988    0.8988
Columns 7 through 8

0.9930    0.9935
stats2 = 

   Contrast: [0.0345 0.0339]
Correlation: [0.8223 0.8255]
     Energy: [0.9616 0.9617]
Homogeneity: [0.9957 0.9957]
t2 =

Columns 1 through 6

0.0345    0.0339    0.8223    0.8255    0.9616    0.9617
Columns 7 through 8

0.9957    0.9957
stats3 = 

   Contrast: [0.0230 0.0246]
Correlation: [0.7450 0.7270]
     Energy: [0.9815 0.9813]
Homogeneity: [0.9971 0.9970]
t3 =

Columns 1 through 6

0.0230    0.0246    0.7450    0.7270    0.9815    0.9813
Columns 7 through 8

0.9971    0.9970

t =

Spalten 1 bis 6

0.0510    0.0503    0.9513    0.9519    0.8988    0.8988

Spalten 7 bis 12

0.9930    0.9935    0.0345    0.0339    0.8223    0.8255

Spalten 13 bis 18

0.9616    0.9617    0.9957    0.9957    0.0230    0.0246

Spalten 19 bis 24

0.7450    0.7270    0.9815    0.9813    0.9971    0.9970

??? Error using ==> minus
    Matrix dimensions must agree.

Die Eingabebilder sind:

fzliver1 fzliver2 fzliver3

Gomathi
quelle
Womit haben Sie den Fuzzy C-Means-Algorithmus implementiert?
Spacey
@ Mohammad Ich verstehe dich nicht, Sir. Wenn Sie nach der Software fragen, habe ich Matlab verwendet.
Gomathi
Ja, das ist mir klar, aber ich meine, haben Sie eine eingebaute Bibliothek für die Implementierung der Fuzzy-C-Means-Segmentierung verwendet oder haben Sie Ihre eigene geschrieben oder eine Bibliothek von Drittanbietern importiert? Ich frage, weil ich auch an der Implementierung eines Segmentierungsalgos interessiert bin, und meine Plattform ist auch MATLAB.
Spacey
@Mohammad Nein, ich habe keine für FCM spezifische Bibliothek installiert. Ich habe FCM Thresheholding verwendet. Siehe Matlab Central File Exchange. Ich hoffe, es wäre nützlich für Sie.
Gomathi
gute Methode, aber ich habe ENVI 4.0-Software. Ich möchte Landsat 7-Satellitenbilder verarbeiten, um das

Antworten:

8

Verwenden Sie Matlab? In diesem Fall benötigen Sie entweder die Bioinformatics Toolbox, die einen SVM-Klassifikator enthält, oder Sie können libsvm herunterladen, das Matlab-Wrapper für Schulungen und Tests enthält.

Dann benötigen Sie einige beschriftete Daten. Klassifizieren Sie Lebertummoren im Gegensatz zu gesunder Leber? Dann bräuchten Sie Bilder von Lebertumoren und gesunden Lebern, die jeweils als solche gekennzeichnet sind.

Dann müssen Sie einige Funktionen berechnen. Was das ist, hängt von der Art des Problems ab. Textur-Features scheinen ein guter Anfang zu sein. Erwägen Sie die Verwendung von Co-Auftritts-Matrizen oder lokalen Binärmustern.

Bearbeiten: Ab dem Release R2014a gibt es in der Statistics and Machine Learning Toolbox eine Fitcsvm- Funktion zum Trainieren eines binären SVM-Klassifikators. Es gibt auch fitcecoc zum Trainieren einer SVM mit mehreren Klassen.

Dima
quelle
Vielen Dank. Ich habe libsvm heruntergeladen. Ich habe auch Texturmerkmale mit Graustufen-Koexistenzmatrizen berechnet. Aber ich weiß nicht, wie ich dem SVM-Programm einen Input geben soll. Bitte beziehen Sie sich auf die stackoverflow.com/questions/9751265/… Bitte führen Sie mich.
Gomathi