Поддержка ROI

Тулбокс поддерживает спецификацию видимых областей (ROIs) в обоих программных и аппаратных обеспечениях. Следующие разделы предоставляют больше информации.

Реализация ROI программного обеспечения

При использовании программного обеспечения ROI пользователь тулбокса устанавливает размерности ROI в ROIPosition свойство. Устройство возвращает целый фрейм изображения. Ваш адаптер задает размерности ROI, когда он создает объект Frame группировать данные изображения.

Пользовательский сценарий

Пользователи устанавливают значение ROIPosition свойство задать ROI. Пользователи задают значение как четырехэлементный вектор в форме:

[Xoffset Yoffset Width Height]

x-и y-смещения задают положение ROI относительно левого верхнего угла фрейма изображения. Для получения дополнительной информации об этом свойстве, см. документацию Image Acquisition Toolbox™.

Предложенный алгоритм

Чтобы поддержать программное обеспечение ROI, ваш адаптер должен проверять значение ROIposition свойство прежде, чем создать систему координат возражает, потому что необходимо задать размерности ROI, когда вы создаете систему координат. Это обычно делается в openDevice() или startCapture() функции.

В вашем цикле захвата системы координат вставьте следующий вызов функции IAdaptor getROI(). Затем используйте значения ширины и высоты ROI, когда вы создадите IAdaptorFrame объект, а не высота полного образа и ширина, возвращенная устройством.

Примечание

Вы используете ширину ROI и высоту, когда вы создаете систему координат, но вы используете ширину полного образа и высоту, когда вы копируете данные изображения с буфера в объект системы координат.

Пример

Следующее является версией isSendFrame() цикл в захвате распараллеливает функцию, которая проверяет ROI. Обратите внимание на то, что вы вызываете getROI() функция, чтобы получить значения ROI, и затем использовать значения ширины и высоты в вызове makeFrame() и смещения от источника в вызове setImage().

if (adaptor->isSendFrame()) {

    // Get ROI information. 
    int roiOriginX, roiOriginY, roiWidth, roiHeight;
    adaptor->getROI(roiOriginX, 
                    roiOriginY,
                      roiWidth,
                     roiHeight);

    // Get frame type & dimensions
    imaqkit::frametypes::FRAMETYPE frameType = 
                                       adaptor->getFrameType();
    int imWidth = adaptor->getMaxWidth();
    int imHeight = adaptor->getMaxHeight();

    // Create a frame object
    imaqkit::IAdaptorFrame* frame = 
    adaptor->getEngine()->makeFrame(frameType,
                                     roiWidth,   // ROI width
                                     roiHeight); // ROI height

    // Copy data from buffer into frame object
    frame->setImage(imBuffer,
                     imWidth, // Full image width
                    imHeight, // Full image height
                  roiOriginX, // ROI origin
                  roiOriginY); // ROI origin

    // Set image's timestamp
    frame->setTime(imaqkit::getCurrentTime());
    // Send frame object to engine.
    adaptor->getEngine()->receiveFrame(frame);

} // if isSendFrame()

Реализация аппаратного ROI

Для аппаратного ROI пользователь задает ROI на устройстве. Устройство возвращает только данные в заданном ROI.

Чтобы реализовать аппаратный ROI, необходимо перегрузить обоих getROI() IADAPTOR и setROI() функции членства в вашей реализации вашего класса адаптера. По умолчанию, если IAdaptor getROI() объекта функция членства не перегружается, настройки ROI будут обработаны в программном обеспечении imaqkit::IEngine.