Habe schon das Forum durchforstet, aber leider keine Lösung zu meinem recht speziellen Problem gefunden.
Ich möchte einen Schwellwert bestimmen, um ein Graustufenbild in ein SW-Bild umzuwandeln. Automatische Lösungen wie "graythresh" kommen nicht in Frage, da der Schwellwert genau die Hälfte des Maximalwertes von jeweils jeder Zeile des Bildes betragen soll (also 0,5).
Soviel zu den Grundvoraussetzungen.
Ich habe aber nun festgestellt, dass das alleinige Maximum für meine Betrachtung nicht ausreicht.
Jetzt kommt die Vorgehensweise, die ich gern umsetzen möchte, wobei es aber hapert:
Jede "Zeile" des Bildes einzeln betrachten und folgendes machen:
- Wert und Index des Maximums bestimmen und DAZU noch alle Werte (und zugehörige Indizes), die um 10% vom Maximum abweichen (dementsprechend geringer sind)
- Alle Werte und Indizes jeweils mitteln
- Aus den gemittelten Werten den Schwellwert bestimmen (mit 0,5 multiplizieren)
- Aus den gemittelten Indizes die "Spalten-Position" bestimmen, damit diese später eingezeichnet werden kann (auf eine ganze Zahl gerundet)
Soweit so gut.
Ich habe schon überlegt, ob das Ganze mit "hist" und "unique" funktionieren kann, wobei ich einen Bin mit 10% Abweichung vom Maximum bestimme. Aber wie setze ich das in Matlab um?
So siehts bisher aus, die Sachen oben sind aber nicht alle umgesetzt und es ist noch ziemlich zerwürfelt:
Code:
% Finden der Achse durch Maximalwert jeder Zeile, % Umwandeln in Binärbild und Konvertieren in Double for p=1:(length(img_dif(:,1))-1) ifmax(img_dif(p,:)) > 0 % ermittelt Maximum der Zeile und Index [achswerte(p),maxspalte(p)] = max(img_dif(p,:));
% sortiert Zeile nach Größe und findet Indizes [sortiert(p,:),index_sortiert(p,:)] = unique(img_dif(p,:));
h = 5; % legt Anzahl der Werte auf 5 fest % sucht die 5 größten Werte heraus, sollen aber das Maximum und alle Werte 10% drunter sein
abweichungen(p,:) = sortiert(end-h:end);
% Histogramm der Zeile
histogramm(p,:) = hist(img_dif(p,:));
% Bisheriger Schwellwert, Hälfte des Maximums % -> soll Hälfte des Mittelwertes aus 10%-Abweichung werden
schwellwert = achswerte(p)/2;
Ich habs zwar geschafft, die insgesamt größten 5 Werte rauszusuchen, aber nicht diese 10%-Abweichung. Die Abhängigkeit von p jeder Variable ist zur späteren Kontrolle.
Hat jemand eine Idee? Wahrscheinlich fehlt mir mal wieder nur der richtige Matlab-Ausdruck...
Würd mich über Hilfe freuen!
LG
edit by steve: Thema in Bildverarbeitung verschoben
Verschoben: 30.08.2009, 10:41 Uhr von steve Von Programmierung nach Bildverarbeitung
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.