exponenta event banner

Предварительный просмотр данных

Введение

После подключения MATLAB ® к устройству получения изображений можно просмотреть видеопоток в режиме реального времени с помощью окна Video Preview. Предварительный просмотр видеоданных позволяет убедиться в том, что изображение является удовлетворительным.

Например, при просмотре можно проверить правильность освещения и фокусировки. При изменении характеристик изображения с помощью свойств объекта ввода видео и объекта источника видео изображение, отображаемое в окне «Просмотр видео», изменяется в соответствии с новыми настройками свойств.

В следующих разделах приведены дополнительные сведения об использовании окна «Просмотр видео».

Вместо использования окна «Просмотр видео» панели инструментов можно отобразить поток просмотра видео в любом указанном объекте изображения Handle Graphics ®. Таким образом, можно включить предварительный просмотр видео в графический интерфейс пользователя собственного создания. Эта возможность описана в следующих разделах.

Открытие окна предварительного просмотра видео

Чтобы открыть окно предварительного просмотра видео, используйте preview функция. В окне Video Preview отображается видеопоток с устройства. На устройство можно открыть только одно окно предварительного просмотра. При использовании нескольких устройств можно одновременно открыть несколько окон предварительного просмотра.

В следующем примере создается объект ввода видео, а затем открывается окно Предварительный просмотр видео для объекта ввода видео.

vid = videoinput('winvideo');
preview(vid);

На следующем рисунке показано окно Video Preview, созданное в этом примере. В окне «Просмотр видео» отображается видеопоток. Размер изображения для предварительного просмотра определяется значением объекта ввода видео. ROIPosition собственность. В окне Video Preview отображаются видеоданные со 100% увеличением.

В дополнение к предварительному изображению окно Video Preview включает в себя информацию об изображении, такую как временная метка видеокадра, разрешение видео, частота кадров и текущее состояние объекта ввода видео.

Примечание

Поскольку видеоформаты обычно выражают разрешение в виде ширины по высоте, окно «Просмотр видео» отображает размер кадра изображения в виде столбца за строкой, а не в виде стандартного формата MATLAB «строка за столбцом».

Примечание

Окно «Получение изображения» (Image Acquisition) Toolbox™ «Предварительный просмотр» (Preview) и «Предварительный просмотр» (Preview), встроенные в инструмент «Получение изображения» (Image Acquisition Tool), поддерживают отображение до 16-битных данных изображения. Окно предварительного просмотра было разработано для отображения только 8-битных данных, но многие камеры возвращают 10-, 12-, 14- или 16-битные данные. Окно предварительного просмотра поддерживает камеры более высокой битовой глубины. Однако более крупные битовые данные масштабируются до 8-битовых с целью отображения предварительно просматриваемых данных. Чтобы записать данные изображения в окне предварительного просмотра в полной битовой глубине для изображений в градациях серого, установите PreviewFullBitDepth свойство для 'on'.

Остановка предварительного просмотра видеопотока

При использовании preview для начала предварительного просмотра данных изображения в окне Video Preview отображается видеопоток, поступающий с устройства. Чтобы остановить обновление видеопотока, вызовите stoppreview функция.

В этом примере создается объект ввода видео и открывается окно Просмотр видео (Video Preview). Затем в примере вызывается stoppreview на этом объекте ввода видео. Окно «Просмотр видео» прекращает обновление отображаемого изображения и отметку времени. Статус, отображаемый в окне «Просмотр видео», также изменяется, указывая, что предварительный просмотр остановлен.

vid = videoinput('winvideo');
preview(vid)
stoppreview(vid)

Чтобы перезапустить видеопоток в окне Video Preview, вызовите preview снова на том же объекте ввода видео.

preview(vid)

Закрытие окна предварительного просмотра видео

Чтобы закрыть определенное окно предварительного просмотра видео, используйте closepreview , указывая объект ввода видео в качестве аргумента. Вам не нужно останавливать видеопоток, отображаемый в окне Video Preview, прежде чем закрывать его.

closepreview(vid)

Чтобы закрыть все открытые окна предварительного просмотра видео, используйте closepreview функция без каких-либо аргументов.

closepreview

Примечание

При вызове без аргумента closepreview функция закрывает только окна Video Preview. closepreview функция не закрывает никакие другие окна фигур, в которых вы направляли видеопоток просмотра в прямом эфире. Дополнительные сведения см. в разделе Предварительный просмотр данных в пользовательских GUI.

Предварительный просмотр данных в пользовательских GUI

Вместо использования окна «Просмотр видео» панели инструментов можно использовать preview для направления видеопотока в реальном времени на любой объект изображения Handle Graphics. Таким образом, можно включить функцию предварительного просмотра панели инструментов в графический интерфейс пользователя собственного создания. (Можно также выполнить пользовательскую обработку при отображении видео в реальном времени. Дополнительные сведения см. в разделе Выполнение пользовательской обработки предварительно просматриваемых данных.)

Чтобы использовать эту возможность, создайте объект изображения, а затем вызовите preview , указывая дескриптор объекта изображения в качестве аргумента. preview выводит видеопоток в реальном времени в указанный объект изображения.

В следующем примере создается окно фигуры, а затем на рисунке создается объект изображения того же размера, что и видеокадры. Затем в примере вызывается preview , указывая дескриптор объекта изображения.

% Create a video input object.
vid = videoinput('winvideo');

% Create a figure window. This example turns off the default
% toolbar, menubar, and figure numbering.

figure('Toolbar','none',...
       'Menubar', 'none',...
       'NumberTitle','Off',...
       'Name','My Preview Window');

% Create the image object in which you want to display 
% the video preview data. Make the size of the image
% object match the dimensions of the video frames.

vidRes = vid.VideoResolution;
nBands = vid.NumberOfBands;
hImage = image( zeros(vidRes(2), vidRes(1), nBands) );

% Display the video data in your GUI.

preview(vid, hImage);

При выполнении этого примера создается графический интерфейс пользователя, показанный на следующем рисунке.

Пользовательский предварительный просмотр

Выполнение пользовательской обработки предварительно просматриваемых данных

При указании объекта изображения для preview функция (см. Предварительный просмотр данных в пользовательских GUI), можно дополнительно указать функцию, которая preview выполняется каждый раз при получении кадра изображения.

Чтобы использовать эту возможность, выполните следующие действия.

  1. Создайте функцию, которую требуется выполнить для каждого кадра изображения, называемую функцией окна предварительного просмотра обновления. Дополнительные сведения об этой функции см. в разделе Создание функции окна предварительного просмотра обновления.

  2. Создание объекта изображения.

  3. Настройка значения объекта изображения 'UpdatePreviewWindowFcn' определяемые приложением данные должны быть дескриптором функции для функции окна предварительного просмотра обновления. Дополнительные сведения см. в разделе Задание функции предварительного просмотра обновлений.

  4. Позвоните в preview , указывая дескриптор объекта изображения в качестве аргумента.

Примечание

Если вы указываете функцию окна предварительного просмотра обновления, в дополнение к любой обработке, которую выполняет ваша функция, она должна отображать видеоданные в объекте изображения. Это можно сделать, обновив CData объекта изображения с входящими видеокадрами. Некоторые рекомендации по обновлению данных, отображаемых в объекте изображения, см. в разделе 1-1B022 технических решений.

Создание функции окна предварительного просмотра обновлений

Когда preview вызывает указанную функцию окна предварительного просмотра обновления, она передает функции следующие аргументы.

Аргумент

Описание

obj

Дескриптор просматриваемого объекта ввода видео

event

Структура данных, содержащая следующие поля:

Data

Текущий кадр изображения, заданный как массив H-by-W-by-B, где H - высота изображения, а W - ширина изображения, как указано в ROIPosition свойство, а B - количество цветовых полос, как указано в NumberOfBands собственность

Resolution

Вектор символов, задающий текущую ширину и высоту изображения, как определено параметром ROIPosition собственность

Status

Вектор символов, описывающий состояние объекта ввода видео

Timestamp

Вектор символов, указывающий время, связанное с текущим кадром изображения, в формате hh:mm:ss:ms

FrameRate

Вектор символов, указывающий текущую частоту кадров объекта ввода видео в кадрах в секунду

himage

Дескриптор объекта изображения, в котором должны отображаться данные

В следующем примере создается функция окна предварительного просмотра обновления, которая отображает метку времени каждого входящего видеокадра в виде текстовой метки в пользовательском графическом интерфейсе пользователя. Функция окна предварительного просмотра обновления использует getappdata для извлечения дескриптора к текстовой метке uicontrol объект из данных, определенных приложением в объекте изображения. Пользовательский графический интерфейс хранит этот дескриптор в текстовой метке uicontrol object - см. раздел Задание функции предварительного просмотра обновления.

Обратите внимание, что функция окна предварительного просмотра обновления также отображает видеоданные путем обновления CData объекта изображения.

function mypreview_fcn(obj,event,himage)
% Example update preview window function.

% Get timestamp for frame.
tstampstr = event.Timestamp;

% Get handle to text label uicontrol.
ht = getappdata(himage,'HandleToTimestampLabel');

% Set the value of the text label.
ht.String = tstampstr;

% Display image data.
himage.CData = event.Data

Задание функции предварительного просмотра обновлений

Чтобы использовать функцию окна предварительного просмотра обновлений, сохраните дескриптор функции в 'UpdatePreviewWindowFcn' определяемые приложением данные объекта изображения. В следующем примере используется setappdata для настройки этих данных, определенных приложением, на дескриптор функции для функции окна предварительного просмотра обновлений, описанной в разделе Создание функции окна предварительного просмотра обновлений.

Этот пример расширяет простое пользовательское окно предварительного просмотра, созданное в окне «Предварительный просмотр данных в пользовательских GUI». Этот пример добавляет три кнопки uicontrol объекты в графическом интерфейсе пользователя: «Начать предварительный просмотр», «Остановить предварительный просмотр» и «Закрыть предварительный просмотр».

Кроме того, для иллюстрации использования функции окна предварительного просмотра обновления пример GUI включает текстовую метку. uicontrol для отображения значения временной метки. Функция окна предварительного просмотра обновлений обновляет эту текстовую метку при каждом получении фрейма. В примере используется setappdata для сохранения дескриптора в текстовой метке uicontrol объект в данных, определяемых приложением, в объекте изображения. Функция окна предварительного просмотра обновлений извлекает этот дескриптор для обновления отображения временных меток.

% Create a video input object.
vid = videoinput('winvideo');

% Create a figure window. This example turns off the default
% toolbar and menubar in the figure.
hFig = figure('Toolbar','none',...
       'Menubar', 'none',...
       'NumberTitle','Off',...
       'Name','My Custom Preview GUI');

% Set up the push buttons
uicontrol('String', 'Start Preview',...
    'Callback', 'preview(vid)',...
    'Units','normalized',...
    'Position',[0 0 0.15 .07]);
uicontrol('String', 'Stop Preview',...
    'Callback', 'stoppreview(vid)',...
    'Units','normalized',...
    'Position',[.17 0 .15 .07]);
uicontrol('String', 'Close',...
    'Callback', 'close(gcf)',...
    'Units','normalized',...
    'Position',[0.34 0 .15 .07]);

% Create the text label for the timestamp
hTextLabel = uicontrol('style','text','String','Timestamp', ...
    'Units','normalized',...
    'Position',[0.85 -.04 .15 .08]);

% Create the image object in which you want to
% display the video preview data.
vidRes = vid.VideoResolution;
imWidth = vidRes(1);
imHeight = vidRes(2);
nBands = vid.NumberOfBands;
hImage = image( zeros(imHeight, imWidth, nBands) );

% Specify the size of the axes that contains the image object
% so that it displays the image at the right resolution and
% centers it in the figure window.
figSize = get(hFig,'Position');
figWidth = figSize(3);
figHeight = figSize(4);
gca.unit = 'pixels';
gca.position = [ ((figWidth - imWidth)/2)... 
               ((figHeight - imHeight)/2)...
               imWidth imHeight ];

% Set up the update preview window function.
setappdata(hImage,'UpdatePreviewWindowFcn',@mypreview_fcn);

% Make handle to text label available to update function.
setappdata(hImage,'HandleToTimestampLabel',hTextLabel);

preview(vid, hImage);

При выполнении этого примера создается графический интерфейс пользователя, показанный на следующем рисунке. Каждый раз preview получает видеокадр, вызывает указанную функцию окна предварительного просмотра обновления, которая обновляет текстовую метку временной метки в графическом интерфейсе пользователя.

Пользовательский графический интерфейс просмотра с текстовой меткой метки времени