Verfasst am: 21.01.2011, 20:08
Titel: Otsu - Verfahren , bitte um Hilfe
Hallo goMatlab Forum,
ich habe ein Problem bei der Umsetzung des Otsu - Verfahrens.
In meiner Umsetzung versuche ich den maximalen Wert des Verhaeltnisses varZw/varIn durch eine einfache Iteration rauszubekommen.
Problem bei der Sache ist, dass ich bei den Werten aus denen ich das Maximum finden will oft INF vorfinde. Ich nehme an das Ergebnis des Verhaeltnisses wird einfach so groß das matlab es nicht mehr anzeigt?!.
Wenn ich dann also per find() das maximum suche, bekomme ich eine ganze Reihe von Werten t, nämlich die, für die das Verhaeltnis varZw/varIn INF ergibt.
Was stimmt in meiner Berechnung nicht? oder wie kann ich dieses Problem umgehen? Ich bin den Quellcode schon etliche Male durchgegangen, finde aber die Lösung nicht.
ich habe mir deinen Code nicht angeschaut, aber wenn du nur die Otsu Methode zum Fenstern von Bildern nutzen möchtest, dann verwende doch den in Matlab bereits enthaltenen Befehl:
ich soll die Funktion für eine Übungsaufgabe in der Uni selbst schreiben.
in die graythresh func von matlab reinzuschaun hat mir bis jetzt auch noch nicht weiter geholfen.
Selbe Problem wie in meinem ersten Post besteht immernoch.
Ich werd es weiter testenund im Notfall versuchen mit dem Isodata-Verfahren einen vernünftigen Schwellwert zu finden.
Wir können uns in der Aufgabenstellung zwischen Otsu, Isodata und Dreiecksverfahren entscheiden.
kann geclosed werden...
Waren einfach ne Menge Fehler in der Funktion sowie in der eigentlichen Berechnung.
Falls jemand die Funktion auch braucht. einfach mal per PM melden.
Dann kann ich einen Ansatz geben wir man da rangeht.
schönen Sonntag noch.
Björn
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 23.01.2011, 18:31
Titel:
Du hast einen Fehler bei:
Du berechnest da nicht die Summe sondern berechnest die Summe aus einer Zahl, die ja trivialerweise die Zahl ist
Richtig aussehen müsste es dann so:
%Varianzen der Klassen berechnen
%für K0
varK0 = 0;
for g=1:t0
varK0= varK0 +((g-gMittelK0)^2*P(g));
end
%für K1
varK1 = 0;
for g=t0+1:255
varK1= varK1 +((g-gMittelK1)^2*P(g));
end
Habs eben ausprobiert, so funktioniert es^^
Hoffe das hilft dir!
MfG Björn
Björn
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 23.01.2011, 18:34
Titel:
Ups xD Sollte eigtl. so aussehen(blödes Copy&Paste):
Du hast einen Fehler bei:
Code:
%Varianzen beider Klassen berechnen
%für K0
for g=1:1:t0
varK0=sum((g-gStrichK0)^2*p(g));
end
%für K1
for g=t0+1:255
varK1=sum((g-gStrichK1)^2*p(g));
end
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.