Verfasst am: 07.12.2012, 17:20
Titel: Bildsegmentierung mithilfe von Histogrammen
Hallo zusammen!
Kniffle gerade an einem hartnäckigen Problem, und zwar möchte ich mehrere Bilder segmentieren.
Das Problem ist unter diesem Link beschrieben (speziell Slides 25 - 30).
Mein Algorithmus beinhaltet die folgenden Gedankenschritte:
1) Threshold für jeden Farbenkanal bestimmen
Ich kann mit imhist() ein Histogram erstellen, aber wie finde ich nun den optimal Threshold?
2) Anzahl Clusters bestimmen
Für jede Farbe habe ich nun 2 Gruppen (über und unter Threshold). Insgesamt also 6. Aber man sieht doch (z.B. auf Slide 29), dass es mehr oder weniger Gruppen geben kann.
3) Sementierung mithilfe von Clusteringalgorithmen durchführen
k-Means gibt mir an welche Pixel zu welcher Gruppe gehören.
Aber wie bestimme ich denn die eigentliche FARBE des Pixels und zeige die Segmentierung an (Slide 29)?
ind = sub2ind([iBinNum,iBinNum,iBinNum],Cidx1,Cidx2,Cidx3);
vColorHist = zeros(iBinNum,iBinNum,iBinNum);
for i = 1:iBinNum^3
vColorHist(i) = sum(ind==i);
end
iBinNum = 1;
for i = 1:length(size(dataHist))
iBinNum = iBinNum*size(dataHist,i);
end
vSeed = [];
for i = 1:iBinNum
vNBins = CalcNeighborBins(size(dataHist),i);
if(sum((dataHist(i)-dataHist(vNBins))>0)==length(vNBins))
vSeed = [vSeed;i];
end end
vBin1 = []; vBin2 = []; vBin3 = [];
for k = I3-1:I3+1 for i = I1-1:I1+1 for j = I2-1:I2+1 if((i~=I1 | j~=I2 | k~=I3) & ... ((i>0&i<=HistSize(1)) & (j>0&j<=HistSize(2)) & (k>0&k<=HistSize(3))))
vBin1 = [vBin1;i];
vBin2 = [vBin2;j];
vBin3 = [vBin3;k];
end end% end for j end% end for i end% end for k
Es ist klar, dass die Segmentierung von dem Inputparameter iBinNum abhängt. Diese Abhängigkeit möchte ich reduzieren (oder sogar eliminieren).
Auch wenn iBinNum = 10 oder = 100 ist, die Anzahl Segmentierungen sollem im Bild nicht allzu stark variieren.
Die Frage ist also:
Zitat:
Wie finde ich die optimal Anzahl von Histograms?
Hier habe ich ein interessantes Tutorial gefunden, frage mich aber wie das genau in MATLAB zu implementiere ist?
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.