Hallo, Es geht darum, dass ich mit zwei Kameras ein Objekt beobachte. Dafür werden zunächst 1.die Kameras mittels je eines Referenzbildes pro Kamera kalibriert, Verdrehung und Verkippung berechnet und diese Daten auf die einzelnen Referenzbilder angewandt. 2. Die Einzelbilder werden zu einem Gesamtbild zusammengeführt und das abgebildete Objekt analysiert. Im Grunde werden hier weitere Kalibrierdaten ermittelt. 3. Die Kameras werden im Anschluss getriggert und die fortlaufende Bildaufnahme gestartet. 4.Diese Livebilder sollen mit den kalibrierdaten der einzelnen Kameras, die in 1. ermittelt wurden, korrigiert werden und dann wie in 2. zusammengeführt und das zugehörige Diagramm für das ausgewertete Merkmal fortlaufend aktualisiert für die aktuell eingezogenen Bilder angezeigt werden. Das Diagramm soll jedoch für das zusammengesetzte Bild ausgegeben werden! Der algorithmus soll also mit den Kalibrierdaten die Livebilder zusammenführen und dann im Anschluss das Merkmal analysieren und als Diagramm ausgeben. "Offline", also mit Bildern, die zuvor manuell aufgenommen wurden, funktioniert das soweit auch, aber "live" nicht. Code: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clc,clear all ,imaqreset % Access an image acquisition device. cam = [videoinput('gige', 1),videoinput('gige', 2)]; cam1=cam(1); cam2=cam(2); dimension1 = get(cam1,'VideoResolution'); dimension2 = get(cam2,'VideoResolution'); bands1= get(cam1,'NumberOfBands'); bands2= get(cam2,'NumberOFBands'); % Initializing triggerconfig(cam1, 'manual') triggerconfig(cam2, 'manual') src1 = getselectedsource(cam1); src2 = getselectedsource(cam2); src1.PacketSize = 9014; src2.PacketSize = 9014; cam1.LoggingMode = 'memory'; cam2.LoggingMode = 'memory'; src1.ExposureTimeAbs=50000; src2.ExposureTimeAbs=50000; cam.FramesPerTrigger = 1; % Initiate the acquisition. start(cam) % % Verify no frames have been logged. frameslogged_cam1 = cam1.FramesAcquired frameslogged_cam2 = cam2.FramesAcquired %Trigger the acquisition. trigger(cam) %Wait for the acquisition to end. wait(cam); % Determine the number frames acquired. frameslogged_cam = cam.FramesAcquired %Bilder für Kalibrierung wurden gemacht und werden im Anschluss an die Funktionen für die Kalibrierung übergeben [variable1]=kalibrierung(cam1,cam2); [variable2]=kalibrierung2(variable1); %variable 1 & 2 sind lediglich Platzhalter an diese Stelle und dienen der Anschaulichkeit %nun wird der Livebildeinzug initialisiert cam.FramesPerTrigger = inf; start(cam); trigger(cam); hImage = image(zeros(dimension1(1), dimension1(2), bands1)); setappdata(hImage,'calib',{variable}) setappdata(hImage, 'UpdatePreviewWindowFcn', @adjust_function) %adjust_function verarbeitet die Livebilder und ermittelt das das Diagramm zum betrachteten Merkmal, welches fortlaufend aktualisiert wird %livebild wird ausgegeben figure(31) %subplot(1,2,1) preview(cam1,hImage) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Das Problem ist jetzt, wie man sicher oben sieht: es wird nur das Livebild einer Kamera mit den kalibrierdaten verarbeitet und ausgegeben. Ich möchte aber an adjust_function beide Kamerabilder inklusive der kalibrierdaten übergeben, die Bilder zusammenführen und dann das Merkmal analysieren und im Diagramm für jedes eintreffende Bilderpaar ausgeben. setappdata funktioniert nur, wenn ein image handle, hier himage übergeben wird. Wie kriege ich es jetzt hin, dass an adjust_function die Bilder beider Kameras übergeben werden? adjust_function ist folgendermaßen aufgebaut: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function adjust_function(~,event,hImage) data = getappdata(hImage,'calib'); [variable] = data{:}; %Bildeinzug imgl=(event.Data); %Bild der linken Kamera wird eingezogen hImage.CData = imgl; %% hier soll das bild der rechten kamera ebenfalls eingezogen werden %% kalibrierdaten der einzelnen kameras auf die einzelnen Bilder %%angewendet werden %% diese Bilder zusammengeführt zu einem großen Bild werden %% Merkmal betrachtet und als Diagramm ausgegeben werden figure(30) plot('platzhalter') end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Wie gesagt, das kalibrieren, zusammenführen und ausgeben steht als algorithmus. Mir geht es jetzt nur darum, die Bilder beider Kameras zusammenzuführen. Die Kameras sind über Ethernet angeschlossen. Ich habe schon diverses probiert, aber nichts davon führte zum Ziel. Unter anderem habe ich hImage als struct definiert und wollte es an adjust_function so übergeben, aber das funktioniert nicht, da setappdate nur mit handle arbeiten kann. Ich verzweifel langsam aber sicher.. Gruß pieee
:
Bearbeitet durch User
Warum rufst du adjust_function nicht zwei mal nacheinander auf? Die Funktion ist offensichtlich dafür gedacht, nur ein Bild zu verarbeiten.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.