Forum: PC-Programmierung Matlab: Livebilder von 2 kameras zusammenführen & bearbeiten


von Pieee P. (pieee)


Lesenswert?

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
von Felix U. (ubfx)


Lesenswert?

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
Noch kein Account? Hier anmelden.