WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

"falsche" Werte einer reihe rausschmeißen

 

DeD_MosAi
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 23.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2014, 12:13     Titel: "falsche" Werte einer reihe rausschmeißen
  Antworten mit Zitat      
Hi,

ich schreibe derzeit für einen Kurs ein Programm welches mir die MTF-Werte eines optischen Systems ausrechnet.


in diesem abschnitt werden in dem Bild, ensprächend der Punkte die man geklickt hat, die erforderlichen Linien angezeigt(senkrecht/wagerecht)
Code:
M(:,1) = y;
N(:,1) = x;
line(x,y)
if ZeilZahl==1
    line(x,y)
elseif y(1)==y(2)
    for i = 1:ZeilZahl-1
        y = y + ZeilAbst;
        M(:,i+1) = y;
        line(x,y)
    end
elseif x(1)==x(2)
    for j = 1:ZeilZahl-1
        x = x + ZeilAbst;
        N(:,j+1) = x;
        line(x,y)
    end
end


im nächsten schritt rechne ich dann den theoretischen Kontrast aus(es ist noch nicht alles, bzw nicht ganz richtig)

Code:
for i=1:ZeilZahl
    if y(1)==y(2)
        C=[M(1,i);M(2,i)];
    elseif x(1)==x(2)
        C=[N(1,i);N(2,i)];
    end
   
    profile = improfile(Bild,x,C);
    figure(2)
    subplot(ZeilZahl,2,i), plot(profile)
    [Imax,posmax] = findpeaks(profile,'minpeakdistance',5);
    [Imin,posmin] = findpeaks(profile*-1,'minpeakdistance',5);
    hold on;
    [b,~]=size(Imax);
    [c,~]=size(Imin);
    if b>=c+1
        for ii=1:c
            Kontrast(i,ii)=(Imax(ii)-Imin(ii))/(Imax(ii)+Imin(ii));
        end
    elseif c>=b+1
        for ii=1:b
            Kontrast(i,ii)=(Imax(ii)-Imin(ii))/(Imax(ii)+Imin(ii));
        end
    else
        for ii=1:b
            Kontrast(i,ii)=(Imax(ii)-Imin(ii))/(Imax(ii)+Imin(ii));
        end
    end
   
end


wobei ich Hilfe benötige ist der teil mit "profile = improfile(Bild,x,C)". Wer sich mal Testbilder für Kameras anschaut wird sehen, dass die schwarz-weißen Striche nicht über das gesamte Bild laufen sondern teilweise sehr schmal sind. Ich muss also die durch improfile ermittelten werte auf den "nützlichen" Bereich beschneiden. Der schwar-weiße bereich ist eine schöne Sinuskurve und der rest ist unnütz und verfälscht alles. Da ich erst mit matlab anfange is es mir in den vergangenen Tage nicht gelungen und deswegen wende ich mich euch. wie bekomme ich die ermittelten werte richtig beschnitten?


Der Teil mit findepeaks bereitet mir auch etwas sorgen. Habe ich es überhaupt richtig gemacht? "profile*-1" dreht die Kurve ja einfach auf den Kopf, dann sind meine mins einfach die max(richtig überlegt? oder gibts da eine elegantere Lösung?). Zumindest bekomme ich dabei in etwa das was rauskommen soll.

ich danke schon mal im vorraus
Private Nachricht senden Benutzer-Profile anzeigen


Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.