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