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
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.