Программирование секвенсора промышленных камер Baumer с помощью BGAPISDK: VCXG Dual Shutter Operation (C#)

Промышленная камера Baumer

Промышленные камеры Baumer Камеры Baumer — это высокопроизводительные высококачественные промышленные камеры, которые можно использовать в различных сценариях применения, таких как обнаружение объектов, подсчет и распознавание, анализ движения и обработка изображений.

10-гигабитные камеры Baumer обладают превосходной производительностью обработки изображений и могут передавать изображения с высоким разрешением в режиме реального времени. Кроме того, камера отличается быстрой передачей данных, низким энергопотреблением, простой интеграцией и высокой масштабируемостью. Промышленные камеры
Baumer

Техническая основа промышленной камеры Baumer BGAPISDK и программирования секвенсора

BGAPI SDK для промышленных камер Baumer представляет собой набор комплектов для разработки программного обеспечения, разработанных Baumer для своей серии камер. SDK предоставляет набор API-интерфейсов, которые позволяют разработчикам создавать профессиональные приложения для управления, захвата, обработки и отображения изображений и данных с камер Baumer. BGAPI SDK поддерживает несколько языков программирования, включая C++, C#, Visual Basic, LabVIEW, Matlab и т. д., и предоставляет большое количество примеров кода и документов, которые помогут пользователям легко приступить к работе и быстро завершить разработку приложений.

BGAPI SDK предоставляет множество функций для управления всеми параметрами камеры Baumer, включая время экспозиции, усиление, баланс белого, режим триггера и т. д., и поддерживает различные форматы данных, такие как Raw, BMP, JPG и т. д., и также обеспечивает отображение в реальном времени, сбор данных, обработку изображений и другие функции, предоставляя разработчикам индивидуальные решения. Кроме того, BGAPI SDK также поддерживает разработку многокамерных систем и может поддерживать различные компьютерные операционные системы, такие как Windows, Linux, Mac OS и т. д.

Функция Sequencer промышленных камер — это расширенная функция программирования, которая позволяет пользователям устанавливать различные параметры съемки в независимые последовательности для реализации автоматического управления переключением камер в соответствии с требованиями различных приложений. Использование функции Sequencer позволяет реализовать несколько задач экспонирования, передачи и обработки изображений в одном цикле съемки, тем самым повышая эффективность и качество инженерной мысли.

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

Функция программирования секвенсора промышленной камеры Baumer через BGAPISDK

Далее рассказывается, как запрограммировать секвенсор промышленных камер Baumer с помощью BGAPISDK на C#: функция работы двойного затвора VCXG.

1. Ссылка на соответствующий файл класса

Код выглядит следующим образом (пример):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Data;
using System.Globalization;
using System.Diagnostics;
using System.IO;

2. Программирование секвенсора промышленных камер Baumer через BGAPISDK: функция двойного затвора VCXG.

В этом примере показано, как запрограммировать секвенсор для работы с двойным затвором с аппаратным запуском. Двойной затвор предназначен для захвата 2 изображений за очень короткое время. Эта операция использует специальную технику, которая позволяет камере захватить второе изображение, в то время как она все еще читает первое.

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

На изображении ниже показано влияние двойного затвора на кривые сигнала: Устранение окружающего света (заштрихованная серая область в сигнале экспозиции) в конце второй экспозиции гарантирует, что камера будет вести себя так, как ожидалось.

вставьте сюда описание изображения

// STOP AUQISITION AND LOAD DEFAULT PARAMETERS
mDevice.RemoteNodeList["AcquisitionStop"].Execute();
mDevice.RemoteNodeList["UserSetSelector"].Value = "Default";
mDevice.RemoteNodeList["UserSetLoad"].Execute();

// CONFIGURE HARDWARE TRIGGER INPUT
// this needs to be done before the sequencer is configured
mDevice.RemoteNodeList["TriggerMode"].Value = "On";
mDevice.RemoteNodeList["TriggerSource"].Value = "Line0";
mDevice.RemoteNodeList["TriggerActivation"].Value = "RisingEdge";
mDevice.RemoteNodeList["TriggerDelay"].Value = (double)0.0;
mDevice.RemoteNodeList["LineSelector"].Value = "Line0";
mDevice.RemoteNodeList["LineInverter"].Value = false;
mDevice.RemoteNodeList["LineDebouncerHighTimeAbs"].Value = (double)1.0;
mDevice.RemoteNodeList["LineDebouncerLowTimeAbs"].Value = (double)1.0;

// CONFIGURE TIMER FOR FLASH
// the timer is started on each exposure start for a duration of 100 µsec
mDevice.RemoteNodeList["TimerSelector"].Value = "Timer1";
mDevice.RemoteNodeList["TimerTriggerSource"].Value = "ExposureStart";
mDevice.RemoteNodeList["TimerTriggerActivation"].Value = "RisingEdge";
mDevice.RemoteNodeList["TimerDelay"].Value = (double)0.0;
// TimerDuration (of Flash) equals Set0 ExposureTime below
mDevice.RemoteNodeList["TimerDuration"].Value = (double)100.0; //100.0 µsec

// CONFIGURE GPIO “Line3” FOR FLASH CONTROL
mDevice.RemoteNodeList["LineSelector"].Value = "Line3";
mDevice.RemoteNodeList["LineSource"].Value = "Timer1Active"; // Line3 is high while Timer1 set up before is active
mDevice.RemoteNodeList["LineInverter"].Value = false;

// SWITCH TO SEQUENCER CONFIG MODE
mDevice.RemoteNodeList["SequencerConfigurationMode"].Value = "On";

// SET 0 (FIRST STEP OF THE SEQUENCE)
mDevice.RemoteNodeList["SequencerSetSelector"].Value = (long)0;
mDevice.RemoteNodeList["SequencerSetLoad"].Execute();

mDevice.RemoteNodeList["TriggerMode"].Value = "On";
mDevice.RemoteNodeList["OffsetX"].Value = (long)0;
mDevice.RemoteNodeList["OffsetY"].Value = (long)0;
mDevice.RemoteNodeList["Width"].Value = (long)320;
mDevice.RemoteNodeList["Height"].Value = (long)240;
mDevice.RemoteNodeList["OffsetX"].Value = (long)160;
mDevice.RemoteNodeList["OffsetY"].Value = (long)120;
// ExposureTime of Set0 = TimerDuration (of Flash)
mDevice.RemoteNodeList["ExposureTime"].Value = (double)100.0; // 100 µsec

mDevice.RemoteNodeList["SequencerPathSelector"].Value = (long)0;
mDevice.RemoteNodeList["SequencerTriggerSource"].Value = "ExposureActive";
mDevice.RemoteNodeList["SequencerTriggerActivation"].Value = "RisingEdge";
// next sequencer step will be Set1 set up below
mDevice.RemoteNodeList["SequencerSetNext"].Value = (long)1;

mDevice.RemoteNodeList["SequencerSetSave"].Execute();

// SET 1 (SECOND STEP OF THE SEQUENCE)
mDevice.RemoteNodeList["SequencerSetSelector"].Value = (long)1;
mDevice.RemoteNodeList["SequencerSetLoad"].Execute();
// the TriggerMode is set to Off, otherwise the camera would wait for the next hardware trigger which is not desired. Changing TriggerMode to Off will return the camera to free run mode, after one exposure we will be back in Set0 where the TriggerMode is switched On again in order for the camera to wait for the next hardware trigger.
mDevice.RemoteNodeList["TriggerMode"].Value = "Off";
mDevice.RemoteNodeList["OffsetX"].Value = (long)0;
mDevice.RemoteNodeList["OffsetY"].Value = (long)0;
mDevice.RemoteNodeList["Width"].Value = (long)320;
mDevice.RemoteNodeList["Height"].Value = (long)240;
mDevice.RemoteNodeList["OffsetX"].Value = (long)160;
mDevice.RemoteNodeList["OffsetY"].Value = (long)120;
// here is the Double Shutter trick, for this second exposure we set the exposure time to 
// the same time as the ReadOutTime of the first image(as calculated by the camera). The 
// camera will recognize that the second image will be ready for ReadOut only after the 
// ReadOut of the first image is finished and therefore start the exposure straight away 
// instead of waiting for the first image to finish ReadOut
double fReadOutTime_Set1 = (double)((long)mDevice.RemoteNodeList["ReadOutTime"].Value);
mDevice.RemoteNodeList["ExposureTime"].Value = (double)fReadOutTime_Set1;

mDevice.RemoteNodeList["SequencerPathSelector"].Value = (long)0;
mDevice.RemoteNodeList["SequencerTriggerSource"].Value = "ExposureActive";
mDevice.RemoteNodeList["SequencerTriggerActivation"].Value = "RisingEdge";
// Next sequencer step will be Step0 again
mDevice.RemoteNodeList["SequencerSetNext"].Value = (long)0;
mDevice.RemoteNodeList["SequencerSetSave"].Execute();
// Start with the Set0
mDevice.RemoteNodeList["SequencerSetStart"].Value = (long)0;

// SEQUENCER CONFIG END
mDevice.RemoteNodeList["SequencerConfigurationMode"].Value = "Off";

// START CAMERA SEQUENCER
mDevice.RemoteNodeList["SequencerMode"].Value = "On";
mDataStream.StartAcquisition();
mDevice.RemoteNodeList["AcquisitionStart"].Execute();

// CAPTURE IMAGES

// STOP CAMERA SEQUENCER
mDevice.RemoteNodeList["AcquisitionStop"].Execute();
mDataStream.StopAcquisition();
mDevice.RemoteNodeList["SequencerMode"].Value = "Off";


Преимущества работы с двойным затвором в промышленных камерах Baumer

Двойной затвор, также известный как глобальный затвор, — это способ захвата всей воксельной информации одновременно. Поскольку все пиксельные данные захватываются одновременно, глобальный затвор способен уменьшить размытость и искажения при движении, особенно при съемке быстро движущихся объектов. Вот некоторые преимущества работы с двойным затвором:

Уменьшение размытия при движении: двойной затвор снимает одновременно, поэтому даже при съемке быстро движущихся объектов вы можете получить идеально четкие изображения без смазывания.

Уменьшение искажений: для приложений, требующих одновременной съемки с нескольких камер, таких как 3D-реконструкция, работа двойного затвора уменьшает искажения из-за разницы во времени.

Улучшение качества изображения. Для некоторых конкретных приложений при съемке в условиях жесткого освещения глобальный затвор может уменьшить шум изображения и обеспечить более широкий динамический диапазон, тем самым улучшая качество изображения.

Лучшее восприятие глубины: на устройствах с поддержкой глубины глобальный затвор может предоставить более точную информацию о глубине, поскольку все пиксели захватываются одновременно, что помогает точно измерять расстояние и скорость движения объектов.

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

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

Двойной затвор, также известный как глобальный затвор, — это способ захвата всей воксельной информации одновременно. Поскольку все пиксельные данные захватываются одновременно, глобальный затвор способен уменьшить размытость и искажения при движении, особенно при съемке быстро движущихся объектов. Вот некоторые преимущества работы с двойным затвором:

Уменьшение размытия при движении: двойной затвор снимает одновременно, поэтому даже при съемке быстро движущихся объектов вы можете получить идеально четкие изображения без смазывания.

Уменьшение искажений: для приложений, требующих одновременной съемки с нескольких камер, таких как 3D-реконструкция, работа двойного затвора уменьшает искажения из-за разницы во времени.

Улучшение качества изображения. Для некоторых конкретных приложений при съемке в условиях жесткого освещения глобальный затвор может уменьшить шум изображения и обеспечить более широкий динамический диапазон, тем самым улучшая качество изображения.

Лучшее восприятие глубины: на устройствах с поддержкой глубины глобальный затвор может предоставить более точную информацию о глубине, поскольку все пиксели захватываются одновременно, что помогает точно измерять расстояние и скорость движения объектов.

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

Guess you like

Origin blog.csdn.net/xianzuzhicai/article/details/131446490