exponenta event banner

Преобразование сигналов управления камерой в pixelcontrol Формат

В этом примере показано, как преобразовывать сигналы Camera Link ® в pixelcontrol инвертировать пикселы с помощью объекта Vision HDL Toolbox™ и преобразовать управляющие сигналы обратно в формат Camera Link.

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

В этом примере можно создать код HDL из трех функций. Чтобы создать локальные копии всех файлов в этом примере, чтобы их можно было просматривать и редактировать, нажмите кнопку «Открыть сценарий».

Создание входных данных в формате связи с камерой

Формат Camera Link состоит из трех управляющих сигналов: F указывает действительный кадр, L - каждую действительную строку и D - каждый действительный пиксель. Для этого примера создайте входные векторы в формате Camera Link для представления базового дополненного видеокадра. Векторы описывают этот кадр 2 на 3, 8-битных оттенков серого. На рисунке активная область изображения находится в пунктирном прямоугольнике, и неактивные пиксели окружают его. Пикселы помечаются значениями в градациях серого.

F = logical([0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0]);
L = logical([0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0]);
D = logical([0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0]);
pixel = uint8([0,0,0,0,0,0,0,30,60,90,0,0,0,120,150,180,0,0,0,0,0,0,0,0]);

Алгоритм панели инструментов HDL Design Vision

Создайте функцию для инвертирования изображения с помощью алгоритмов панели инструментов Vision HDL. Функция содержит системный объект, поддерживающий создание кода HDL. Эта функция ожидает и возвращает пиксель и соответствующие управляющие сигналы в формате панели инструментов Vision HDL.

function [pixOut,ctrlOut] = InvertImage(pixIn,ctrlIn)
  
  persistent invertI;
  if isempty(invertI) 
      tabledata = linspace(255,0,256);
      invertI = visionhdl.LookupTable(uint8(tabledata));
  end
  
  % *Note:* This syntax runs only in R2016b or later. If you are using an 
  % earlier release, replace each call of an object with the equivalent |step|
  % syntax. For example, replace |myObject(x)| with |step(myObject,x)|.  
  [pixOut,ctrlOut] = invertI(pixIn,ctrlIn);
end

Преобразование управляющих сигналов канала камеры в pixelcontrol Формат

Создайте пользовательский объект System для преобразования сигналов связи с камерой в формат управляющего сигнала панели инструментов Vision HDL. Объект преобразует управляющие сигналы, а затем вызывает pixelcontrolstruct для создания структуры, ожидаемой объектами Vision HDL Toolbox System. Этот фрагмент кода показывает логику преобразования сигналов.

  ctrl = pixelcontrolstruct(obj.hStartOutReg,obj.hEndOutReg,...
                       obj.vStartOutReg,obj.vEndOutReg,obj.validOutReg);
  vStart = obj.FReg && ~obj.FPrevReg;
  vEnd = ~F && obj.FReg;
  hStart = obj.LReg && ~obj.LPrevReg;
  hEnd = ~L && obj.LReg;
  obj.vStartOutReg = vStart;
  obj.vEndOutReg = vEnd;
  obj.hStartOutReg = hStart;
  obj.hEndOutReg = hEnd;
  obj.validOutReg = obj.DReg;

Объект сохраняет значения входного и выходного управляющих сигналов в регистрах. vStart зашкаливает в течение одного цикла в начале F. vEnd зашкаливает в течение одного цикла в конце F. hStart и hEnd получаются аналогично из L. Объект возвращает текущее значение ctrl каждый раз, когда вы его называете.

Эта обработка добавляет два цикла задержки к управляющим сигналам. Объект проходит через значение пикселя после совпадающих циклов задержки. Полный код объекта System см. в разделе CAMERALINKtoVHT_Adapter.m.

Новообращенный pixelcontrol Связь с камерой

Создайте пользовательский объект System для преобразования сигналов панели инструментов Vision HDL в формат Camera Link. Объект вызывает pixelcontrolsignals функция сглаживания управляющей структуры в ее составляющие сигналы. Затем он вычисляет эквивалентные сигналы Camera Link. Этот фрагмент кода показывает логику преобразования сигналов.

  [hStart,hEnd,vStart,vEnd,valid] = pixelcontrolsignals(ctrl);
  Fnew = (~obj.FOutReg && vStart) || (obj.FPrevReg && ~obj.vEndReg);
  Lnew = (~obj.LOutReg && hStart) || (obj.LPrevReg && ~obj.hEndReg);
  obj.FOutReg = Fnew;
  obj.LOutReg = Lnew;
  obj.DOutReg = valid;

Объект сохраняет значения входного и выходного управляющих сигналов в регистрах. F выше от vStart кому vEnd. L выше от hStart кому hEnd. Объект возвращает текущие значения FOutReg, LOutReg, и DOutReg каждый раз, когда вы его называете.

Эта обработка добавляет один цикл задержки к управляющим сигналам. Объект проходит через значение пикселя после соответствующего цикла задержки. Полный код объекта System см. в разделе VHTtoCAMERALINKAdapter.m.

Создание функций преобразования, поддерживающих создание кодов HDL

Оберните объекты converter System в функции, подобные InvertImageТаким образом, можно создать код HDL для этих алгоритмов.

function [ctrl,pixelOut] = CameraLinkToVisionHDL(F,L,D,pixel)
% CameraLink2VisionHDL : converts one cycle of CameraLink control signals 
% to Vision HDL format, using a custom System object.
% Introduces two cycles of delay to both ctrl signals and pixel data.

persistent CL2VHT;
  if isempty(CL2VHT)
      CL2VHT = CAMERALINKtoVHT_Adapter();
  end
  
  [ctrl,pixelOut] = CL2VHT(F,L,D,pixel);

Посмотрите CameraLinkToVisionHDL.m, и VisionHDLToCameraLink.m.

Запись тестового стенда

Чтобы инвертировать поток пикселей Camera Link с помощью этих компонентов, напишите скрипт тестового стенда, который:

  1. Предварительное выделение выходных векторов для сокращения времени моделирования

  2. Преобразует управляющие сигналы Camera Link для каждого пикселя в формат панели инструментов Vision HDL

  3. Вызывает Invert функция для разворота каждого значения пикселя

  4. Преобразует управляющие сигналы для этого пикселя обратно в формат Camera Link

[~,numPixelsPerFrame] = size(pixel);
pixOut = zeros(numPixelsPerFrame,1,'uint8');
pixel_d = zeros(numPixelsPerFrame,1,'uint8');
pixOut_d = zeros(numPixelsPerFrame,1,'uint8');
DOut = false(numPixelsPerFrame,1);
FOut = false(numPixelsPerFrame,1);
LOut = false(numPixelsPerFrame,1);
ctrl = repmat(pixelcontrolstruct,numPixelsPerFrame,1);
ctrlOut = repmat(pixelcontrolstruct,numPixelsPerFrame,1);

for p = 1:numPixelsPerFrame
  [pixel_d(p),ctrl(p)] = CameraLinkToVisionHDL(pixel(p),F(p),L(p),D(p));
  [pixOut(p),ctrlOut(p)] = Invert(pixel_d(p),ctrl(p));
  [pixOut_d(p),FOut(p),LOut(p),DOut(p)] = VisionHDLToCameraLink(pixOut(p),ctrlOut(p));
end

Посмотреть Результаты

Результирующие векторы представляют этот инвертированный кадр 2 на 3 8-битных оттенков серого. На рисунке активная область изображения находится в пунктирном прямоугольнике, и неактивные пиксели окружают его. Пикселы помечаются значениями в градациях серого.

При наличии лицензии DSP System Toolbox™ векторы можно просматривать как сигналы с течением времени с помощью логического анализатора. Этот сигнал показывает pixelcontrol и управляющие сигналы Camera Link, начальные значения пикселей и задержанные значения пикселей после каждой операции.

См. также

|

Связанные темы