Создание структуры пиксельного сигнала управления потоковой передачей
При интеграции проектов Vision HDL Toolbox с алгоритмами, использующими другой интерфейс, может потребоваться создать структуру вручную или манипулировать управляющими сигналами вне структуры.
Создать pixelcontrol путем передачи пяти значений управляющего сигнала в pixelcontrolstruct функция. Аргументы функции должны быть скалярными значениями. Эти управляющие сигналы могут поступать от камеры или другого источника видеосигнала. Векторы управляющих сигналов в этом примере описывают простое тестовое изображение 2 на 3 пиксела, окруженное пикселями заполнения.
![]()
hStart = [0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0]; vStart = [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; hEnd = [0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0]; vEnd = [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0]; valid = [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]); [~,numPix] = size(pixel); ctrlIn = repmat(pixelcontrolstruct,numPix,1); for i = 1:numPix ctrlIn(i) = pixelcontrolstruct(hStart(i),vStart(i),... hEnd(i),vEnd(i),valid(i)); end
Каждый элемент ctrlIn - структура, содержащая пять управляющих сигналов.
ctrlIn(8)
ans = struct with fields:
hStart: 1
hEnd: 1
vStart: 0
vEnd: 0
valid: 1
Затем эту структуру можно передать объекту Vision HDL Toolbox System. В этом примере объект LookupTable используется для инвертирования каждого пикселя.
Примечание.Синтаксис этого объекта выполняется только в R2016b или более поздних версиях. При использовании более ранней версии замените каждый вызов объекта эквивалентным step синтаксис. Например, заменить myObject(x) с step(myObject,x).
tabledata = uint8(linspace(255,0,256)); inverter = visionhdl.LookupTable(tabledata); pixelOut = zeros(numPix,1,'uint8'); ctrlOut = repmat(pixelcontrolstruct,numPix,1); for i = 1:numPix [pixelOut(i),ctrlOut(i)] = inverter(pixel(i),ctrlIn(i)); end
Если необходимо использовать управляющие сигналы непосредственно в алгоритмах нисходящего направления, можно распрямить каждую структуру на пять logical значения управляющего сигнала путем вызова pixelcontrolsignals функция.
[hStartOut,vStartOut,hEndOut,vEndOut,validOut] = deal(false(numPix,1)); for i = 1:numPix [hStartOut(i),vStartOut(i),hEndOut(i),vEndOut(i),validOut(i)] = ... pixelcontrolsignals(ctrlOut(i)); end
Каждый выходной управляющий сигнал является вектором логических значений, которые соответствуют pixelOut вектор.
validOut'
ans = 1x24 logical array
0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0
hStart - Управляющий сигнал, указывающий первый пиксель в горизонтальной линииlogicalУправляющий сигнал, указывающий первый пиксель в горизонтальной линии, указанный как logical скаляр.
hEnd - Управляющий сигнал, указывающий последний пиксель в горизонтальной линииlogicalУправляющий сигнал, указывающий последний пиксель в горизонтальной линии, указанный как logical скаляр.
vStart - Управляющий сигнал, указывающий первый пиксель в первой (верхней) строкеlogicalУправляющий сигнал, указывающий первый пиксель в первой (верхней) строке, указанный как logical скаляр.
vEnd - Управляющий сигнал, указывающий последний пиксель в последней (нижней) строкеlogicalУправляющий сигнал, указывающий последний пиксель в последней (нижней) строке, указанный как logical скаляр.
valid - Управляющий сигнал, указывающий на достоверность пикселяlogicalУправляющий сигнал, указывающий на достоверность пикселя, указанного как logical скаляр.
ctrl - Сигналы пиксельного управленияlogical ценностиСигналы управления пикселями, определенные как структура, содержащая пять logical значения.
Структура пиксельного управления представляет собой конкретный формат, используемый объектами панели инструментов Vision HDL. См. раздел Структура пиксельного управления.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.