You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

202 lines
6.8 KiB

classdef depth_view_example < matlab.apps.AppBase
% Properties that correspond to app components
properties (Access = public)
UIFigure matlab.ui.Figure
DepthAX matlab.ui.control.UIAxes
ColorAX matlab.ui.control.UIAxes
StartButton matlab.ui.control.Button
StopButton matlab.ui.control.Button
end
properties (Access = private) %, Hidden = true)
MeTimer % Timer object
DrawFlag % Boolean
Ctx % Realsense.context
Dev % Realsense.device
Cfg % Realsense.config
Pipe % Realsense.pipeline
Colorizer % Realsense.colorizer
Profile % Realsense.profile
Frameset % Realsense.frameset
hhDepth % Image
hhColor % Image
end
% Callbacks that handle component events
methods (Access = private)
function MeTimerFcn(app,~,~)
if ( app.DrawFlag == 1 )
% lock drawing process
app.DrawFlag = 0;
% Get frameset
app.Frameset = app.Pipe.wait_for_frames();
depth_frame = app.Frameset.get_depth_frame();
depth_color = app.Colorizer.colorize(depth_frame);
depth_data = depth_color.get_data();
depth_img = permute(reshape(depth_data',[3,depth_color.get_width(),depth_color.get_height()]),[3 2 1]);
[ki kj] = size (app.hhDepth);
if ki*kj < 1
app.hhDepth = imshow(depth_img,'Parent',app.DepthAX);
else
app.hhDepth.CData = depth_img;
end
color_frame = app.Frameset.get_color_frame();
color_data = color_frame.get_data();
color_img = permute(reshape(color_data',[3,color_frame.get_width(),color_frame.get_height()]),[3 2 1]);
[ki kj] = size (app.hhColor);
if ki*kj < 1
app.hhColor = imshow(color_img,'Parent',app.ColorAX);
else
app.hhColor.CData = color_img;
end
% unlock drawing process
app.DrawFlag = 1;
pause(0.001);
end
end
% Executes after component creation
function StartUpFunc(app)
% Create Realsense items
app.Ctx = realsense.context();
devs = app.Ctx.query_devices();
if ( numel(devs) < 1 )
error ( 'Not found RealSense device' );
end
app.Dev = devs{1};
sn = app.Dev.get_info(realsense.camera_info.serial_number);
app.Cfg = realsense.config();
app.Cfg.enable_device(sn);
app.Pipe = realsense.pipeline();
app.Colorizer = realsense.colorizer();
app.Profile = app.Pipe.start();
% Create timer object
kFramePerSecond = 30.0; % Number of frames per second
Period = double(int64(1000.0 / kFramePerSecond))/1000.0+0.001; % Frame Rate
app.MeTimer = timer(...
'ExecutionMode', 'fixedSpacing', ... % 'fixedRate', ... % Run timer repeatedly
'Period', Period, ... % Period (second)
'BusyMode', 'drop', ... %'queue',... % Queue timer callbacks when busy
'TimerFcn', @app.MeTimerFcn); % Specify callback function
app.DrawFlag = 0;
app.hhDepth = [];
app.hhColor = [];
end
% Button pushed function: start timer
function onStartButton(app, event)
% If timer is not running, start it
if strcmp(app.MeTimer.Running, 'off')
app.DrawFlag = 1;
start(app.MeTimer);
end
end
% Button pushed function: stop timer
function onStopButton(app, event)
app.DrawFlag = 0;
stop(app.MeTimer);
end
%Close request UIFigure function
function UIFigureCloseRequest(app,event)
app.DrawFlag = 0;
stop(app.MeTimer);
delete(app.MeTimer);
app.Pipe.stop();
delete(app.Profile);
delete(app.Colorizer);
delete(app.Pipe);
delete(app.Cfg);
delete(app.Dev);
delete(app.Ctx);
delete(app);
end
end
% Component initialization
methods (Access = private)
% Create UIFigure and components
function createComponents(app)
% Create UIFigure and hide until all components are created
app.UIFigure = uifigure('Visible', 'off');
app.UIFigure.Position = [20 20 1345 590];
app.UIFigure.Name = 'RealSenseViewStdDef Figure';
app.UIFigure.CloseRequestFcn = createCallbackFcn(app,@UIFigureCloseRequest);
setAutoResize(app,app.UIFigure,false);
% Create DepthAX
app.DepthAX = uiaxes(app.UIFigure);
app.DepthAX.Position = [25 100 640 480];
% Create ColorAX
app.ColorAX = uiaxes(app.UIFigure);
app.ColorAX.Position = [685 100 640 480];
% Create StartButton
app.StartButton = uibutton(app.UIFigure, 'push');
app.StartButton.ButtonPushedFcn = createCallbackFcn(app, @onStartButton, true);
app.StartButton.IconAlignment = 'center';
app.StartButton.Position = [100 22 100 22];
app.StartButton.Text = 'Start';
% Create StopButton
app.StopButton = uibutton(app.UIFigure, 'push');
app.StopButton.ButtonPushedFcn = createCallbackFcn(app, @onStopButton, true);
app.StopButton.IconAlignment = 'center';
app.StopButton.Position = [220 22 100 22];
app.StopButton.Text = 'Stop';
% Show the figure after all components are created
app.UIFigure.Visible = 'on';
end
end
% App creation and deletion
methods (Access = public)
% Construct app
function app = depth_view_example
% Create UIFigure and components
createComponents(app)
% Register the app with App Designer
registerApp(app, app.UIFigure)
% Set Startup function - after component creation
runStartupFcn(app,@StartUpFunc);
if nargout == 0
clear app
end
end
% Code that executes before app deletion
function delete(app)
% Delete UIFigure when app is deleted
delete(app.UIFigure)
end
end
end