⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 untitled3.m

📁 视觉跟踪的算法 视觉跟踪的算法 视觉跟踪的算法 视觉跟踪的算法 视觉跟踪的算法
💻 M
字号:
utilpath = fullfile(matlabroot, 'toolbox', 'imaq', 'imaqdemos', ...
    'html', 'applications', 'laserTracking');
addpath(utilpath);
vid = videoinput('winvideo', 1, 'RGB24_320x240');
set(vid, 'FramesPerTrigger', 1);
set(vid, 'TriggerRepeat', Inf);
triggerconfig(vid,'manual')
laserFig = figure;
hBox = plot([0 0 1 1 0], [0 1 1 0 0], 'b-');
hold on
hTarget = plot(0, 0, 'yo');
set(gca, 'Color', [0, 0, 0]);
set(laserFig, 'Color', [0, 0, 0], 'Menubar', 'none', ...
    'DoubleBuffer', 'on', 'Pointer', 'custom', ...
    'PointerShapeCData', repmat(NaN, 16, 16));
posText = sprintf('%s\n%s', ...
    'Position the camera and ensure the blue box', ...
    'is the only thing in the camera''s view.');
infoText = text(0, -0.2,  posText, 'Color', [1 1 1]);
axis([-0.2 1.2 -0.2 1.2])
axis('equal')
preview(vid)
smallFigPos = get(laserFig, 'Position');
set(laserFig, 'Position', get(0, 'ScreenSize'));
disp('Waiting for camera to be positioned...press any key to continue.')
pause
calibText = sprintf('%s\n%s', ...
    'Aim the laser pointer on each target as it appears.', ...
    'Hold the laser on the target until the target moves.');
set(infoText, 'string', calibText);
start(vid)
spyFig = figure;
figure(laserFig);
set(hTarget, 'Xdata', 0, 'Ydata', 0);
sound(1), pause(2)
sound(1), trigger(vid);
acqResults{1} = getdata(vid, 1);

[xCalib(1), yCalib(1), laserSights] = util_findlaser(acqResults{1});
figure(spyFig);
spy(laserSights)
title('Target 1: Suspected Laser Sighting')
figure(laserFig);
set(hTarget, 'Xdata', 0, 'Ydata', 1);
sound(1), pause(2)
sound(1), trigger(vid);
acqResults{2} = getdata(vid, 1);

[xCalib(2), yCalib(2), laserSights] = util_findlaser(acqResults{2});
figure(spyFig);
spy(laserSights)
title('Target 2: Suspected Laser Sighting')
figure(laserFig);
set(hTarget, 'Xdata', 1, 'Ydata', 1);
sound(1), pause(2)
sound(1), trigger(vid);
acqResults{3} = getdata(vid, 1);

[xCalib(3), yCalib(3), laserSights] = util_findlaser(acqResults{3});
figure(spyFig);
spy(laserSights)
title('Target 3: Suspected Laser Sighting')
figure(laserFig);
set(hTarget, 'Xdata', 1, 'Ydata', 0);
sound(1), pause(2)
sound(1), trigger(vid);
acqResults{4} = getdata(vid, 1);

[xCalib(4), yCalib(4), laserSights] = util_findlaser(acqResults{4});
figure(spyFig);
spy(laserSights)
title('Target 4: Suspected Laser Sighting')
close(spyFig)
stop(vid);
calibFig = figure;
util_plotpos(acqResults{1}, xCalib(1), yCalib(1));
util_plotpos(acqResults{2}, xCalib(2), yCalib(2));
util_plotpos(acqResults{3}, xCalib(3), yCalib(3));
util_plotpos(acqResults{4}, xCalib(4), yCalib(4));
close(calibFig)
figure(laserFig);
set(infoText, 'string', 'Move the laser pointer within the blue box.');
laser.x = [];
laser.y = [];
start(vid)
for i = 1:100,
     sound(1), trigger(vid);
    frame = getdata(vid, 1);
    [x, y] = util_findlaser(frame);    

    if ~isnan(x) && ~isnan(y),
         x = max([x min(xCalib([1 2]))]);
        x = min([x max(xCalib([3 4]))]);
        y = min([y max(yCalib([1 4]))]);
        y = max([y min(yCalib([2 3]))]);
        tform = cp2tform([xCalib(:) yCalib(:)], [0 0; 0 1; 1 1; 1 0], 'projective');     
        xyScreen = tformfwd([x, y], tform);
        xScreen = xyScreen(1);
        yScreen = xyScreen(2);
         xScreen = min([xScreen 1]);
        xScreen = max([xScreen 0]);    
        yScreen = min([yScreen 1]);
        yScreen = max([yScreen 0]);
         laser.x = [laser.x(:); xScreen];
        laser.y = [laser.y(:); yScreen];
    end
end
set(laserFig, 'Position', smallFigPos);
plot(laser.x, laser.y, 'r*');
close(laserFig);
stop(vid)
delete(vid)
clear vid
rmpath(utilpath);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -