Извлечение сигналов из структуры управляющих сигналов потоковой передачи пикселей
При интеграции проектов 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
ctrl - Сигналы пиксельного управленияlogical ценностиСигналы управления пикселями, определенные как структура, содержащая пять logical значения.
Структура пиксельного управления представляет собой конкретный формат, используемый объектами Vision HDL Toolbox™. См. раздел Структура пиксельного управления.
hStart - Управляющий сигнал, указывающий первый пиксель в горизонтальной линииlogicalУправляющий сигнал, указывающий первый пиксель в горизонтальной линии, указанный как logical скаляр.
hEnd - Управляющий сигнал, указывающий последний пиксель в горизонтальной линииlogicalУправляющий сигнал, указывающий последний пиксель в горизонтальной линии, указанный как logical скаляр.
vStart - Управляющий сигнал, указывающий первый пиксель в первой (верхней) строкеlogicalУправляющий сигнал, указывающий первый пиксель в первой (верхней) строке, указанный как logical скаляр.
vEnd - Управляющий сигнал, указывающий последний пиксель в последней (нижней) строкеlogicalУправляющий сигнал, указывающий последний пиксель в последней (нижней) строке, указанный как logical скаляр.
valid - Управляющий сигнал, указывающий на достоверность пикселяlogicalУправляющий сигнал, указывающий на достоверность пикселя, указанного как logical скаляр.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.