pixelcontrol
Этот пример преобразовывает сигналы Camera Link® в структуру pixelcontrol
, инвертирует пиксели с объектом Vision HDL Toolbox и преобразовывает управляющие сигналы назад в формат Ссылки Камеры.
Блоки Vision HDL Toolbox™ и объекты используют пользовательский формат потокового видео. Если ваша система работает с данными о потоковом видео из камеры, необходимо преобразовать сигналы управления камерой в этот пользовательский формат. Также, если вы интегрируете алгоритмы Vision HDL Toolbox в существующий проект и код подтверждения, который действует в формате камеры, необходимо также преобразовать выходные сигналы проекта Vision HDL Toolbox назад к формату камеры.
Можно сгенерировать HDL-код от трех функций в этом примере.
Формат Ссылки Камеры состоит из трех управляющих сигналов: F указывает, что допустимый кадр, L указывает на каждую допустимую строку, и D указывает на каждый допустимый пиксель. В данном примере создайте входные векторы в формате Ссылки Камеры, чтобы представлять основной заполненный кадр видео. Векторы описывают это 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]);
Создайте функцию, чтобы инвертировать изображение с помощью алгоритмов Vision HDL Toolbox. Функция содержит Системный объект, который поддерживает генерацию HDL-кода. Эта функция ожидает и возвращает пиксель и сопоставленные управляющие сигналы в формате Vision HDL Toolbox.
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
Запишите пользовательский Системный объект, чтобы преобразовать сигналы Ссылки Камеры в формат управляющего сигнала Vision HDL Toolbox. Объект преобразовывает управляющие сигналы, и затем вызывает функцию pixelcontrolstruct
, чтобы создать структуру, ожидаемую Системными объектами Vision HDL Toolbox. Этот фрагмент кода показывает логику, чтобы преобразовать сигналы.
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
каждый раз, когда вы вызываете его.
Эта обработка добавляет два цикла задержки с управляющими сигналами. Объект проходит через пиксельное значение после соответствия с циклами задержки. Для полного кода для Системного объекта см. CAMERALINKtoVHT_Adapter.m.
pixelcontrol
в ссылку камерыЗапишите пользовательский Системный объект, чтобы преобразовать сигналы Vision HDL Toolbox назад в формат Ссылки Камеры. Вызовы объектов pixelcontrolsignals
функционируют, чтобы сгладить управляющую структуру в ее сигналы компонента. Затем это вычисляет эквивалентные сигналы Ссылки Камеры. Этот фрагмент кода показывает логику, чтобы преобразовать сигналы.
[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
каждый раз, когда вы вызываете его.
Эта обработка добавляет один цикл задержки с управляющими сигналами. Объект проходит через пиксельное значение после соответствующего цикла задержки. Для полного кода для Системного объекта см. VHTtoCAMERALINKAdapter.m.
Перенесите Системные объекты конвертера в функции, подобные 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.
Чтобы инвертировать пиксельный поток Ссылки Камеры с помощью этих компонентов, запишите скрипт испытательного стенда что:
Предварительно выделяет выходные векторы, чтобы уменьшать время симуляции
Преобразовывает управляющие сигналы Ссылки Камеры для каждого пикселя к формату Vision HDL Toolbox
Вызывает функцию Invert
, чтобы инвертировать каждое пиксельное значение
Преобразовывает управляющие сигналы для того пикселя назад к формату Ссылки Камеры
[~,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™, можно просмотреть векторы как сигналы в зависимости от времени с помощью Logic Analyzer. Эта форма волны показывает pixelcontrol
и управляющие сигналы Ссылки Камеры, стартовые пиксельные значения и задержанные пиксельные значения после каждой операции.
pixelcontrolsignals
| pixelcontrolstruct