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
202 lines
6.8 KiB
2 months ago
|
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
|