Verfasst am: 26.11.2014, 09:37
Titel: Maximum aus Gauß Fit anzeigen lassen
Hallo Leute!
Habe ein Programm geschrieben, welches mir Bilder einliest und auswertet. Über meinen Plot habe ich dann einen Gauß Fit gelegt.
Kann mir jemand sagen wie ich mir von dem Gauß Fit die Bild Nummer anzeigen lassen kann?
Ich möchte also meinen x Wert beim Maximum meines Gauß Fits anzeigen lassen. (ein Bild vom Plot befindet sich im Anhang)
Um die Daten zu fitten habe ich folgende Funktion verwendet:
Code:
[xData, yData] = prepareCurveData( x, G );
% Set up fittype and options.
ft = fittype( 'gauss1' );
opts = fitoptions( 'Method', 'NonlinearLeastSquares' );
opts.Display = 'Off';
opts.Lower = [-Inf -Inf0];
opts.StartPoint = [89140982510.2975478327667];
% Fit model to data. [fitresult, gof] = fit( xData, yData, ft, opts );
%Höchstwert von Gauß=Fitresult ausgeben
% Plot fit with data. hold on; figure( 'Name', 'untitled fit1' );
h = plot( fitresult, xData, yData );
"fitresult" ist ja ein Objekt vom Typ "cfit" und dürfte wenn ich das recht verstehe aus einem Modell (== Funktionsformel) und Pametern bestehen. Ich kann mir verschiedene Wege vorstellen das Maximum zu Berechnen. Vielleicht am einfachsten im allgemenen Fall ist einen Vektor mit "X Werten" zu erstellen und den dann mit "feval" des cfit Objektes auswerten. Und dann halt davon das Maximum finden lassen
Im Fall einer Normalverteilung wohl noch einfacher, weill man ja den Parameter für die Mitte hat und damit den Ort des Maximums.
Hi, ich leg dir jetzt mal meinen Output rein, sowie die Innere Funktion.
Hoffe du kannst mir weiterhelfen. Beste Grüße
Code:
n=21;
x=0;
for i=1:n, %es werden 22 Images durchgezählt
filename = ['Stahl_' num2str(i) '.bmp']; %Ordner der Bilder auswählen,
%num2str(i) legt bei den Bildern die _1 _2 usw. an
x(i)=i;
[Bild, colorMap] = imread(filename); %Ändert Bild um, speichert es ab und liest es wieder ein
colormap(colorMap);
colorbar;
Raw_Img = ind2rgb(Bild, colorMap);
imwrite(Raw_Img,'Ppapier.bmp');
filename = ['Ppapier.bmp'];
Raw_Img=imread(filename);
Also die Werte für G(Y-Achse) sind
3900238 3901932 4057300 4173983 4401737 4519637 4546606 4675312 4688290 4904967 4766142 4800311 4853610 4863976 4911800 4745168 4843313 4764165 4874951 4857886 4816568
und für x dann einfach 1-21
Dann x Data, y Data entsprechend auswählen und Gaussian als Fit-Type. Dann wird soweit alles automatisch berechnet. Im Menü Fit -> Save To Workspace wählen. Ich habe als Namen 'fittedgomatlabgauss' genommen. Dieses cfit Objekt im Workspace ist das was ich gerne gehabt hätte.
Mit dem FEVAL Befehl kann man jetzt z.B. für jeden X Wert den gefitteten Y Wert bekommen, z.B.:
wäre es auch möglich, wenn ich in einem einzelnen Programm für verschiedene Fits die Bildnummern ausgeben lasse das in einer Tabelle darstellen zu lassen?
Ich kriege z.B. für verschiedene Funktionen Verschiedene Bildnummern:
GaußFit = Bildnummer 5
Polynomfit= Bildnummer 7
usw.
kann ich mir diese Ergebnisse dann in einer Tabelle anzeigen lassen?
Oder ist es nur möglich dass es unten im Command Window erscheint?
Deine Funktion gibt mir jetzt zwar die y-x-Werte aus aber nur für die ganzen Zahlen.
Sprich eine 7 oder 8.
Oder eben das Minimum von 120,5 obwohl das Minimum bei 7,6 liegen würde.
An was könnte das liegen?
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.