2013-04-24 5 views
1

Я попытался написать функцию Matlab в Simulink. Мой первый FUNC так:Функция Matlab как блок Simulink

function y = fcn(u, v) 
coder.extrinsic('detectSURFFeatures'); 
boxPoints = detectSURFFeatures(u); 
%scenePoints = detectSURFFeatures(v); 
vBoxPoints = boxPoints.selectStrongest(100); 
y = 0; 
y = vBoxPoints; 

Но я вижу ошибки: 1. Попытка извлечь поле 'selectStrongest' от 'mxArray'. 2.Установленная функция или переменная 'vBoxPoints'. Первое присваивание локальной переменной определяет ее класс. 3. Ошибка в ширинах или размерах портов. Выходной порт 1 функции 'detecting_cross/MATLAB Function/v' является матрицей [400x239]. Pls, помощь.

ответ

4

Данные, возвращаемые из внешних функций, являются типами mxArray. Если вы хотите получить значения из этих mxArrays, вам необходимо предварительно объявить их, чтобы результат внешней функции мог быть автоматически преобразован в этот тип. Вы можете использовать что-то вроде

boxPoints = struct('selectStrongest',zeros(100,1)); 

перед вызовом detectSUTFFeatures. Если mxArray не соответствует одному из функции, вы получите ошибку во время выполнения. Ваши ошибки 2 и 3 связаны с первой проблемой.

+0

Hi. Хорошо, я бы попробовал: 'function y = fcn (u) coder.extrinsic (' detectSURFFeatures ',' rgb2gray '); boxPoints = struct ('selectStrongest', нули (100,1)); img = нули (150, 200, 'uint8'); img (:) = rgb2gray (u); boxPoints = detectSURFFeatures (img); y = нули (100, 1); y = boxPoints.selectStrongest (100); ' Но это не сработало. –

+0

Я дал эту строку, которая создает пример структуры. Вы должны сделать это таким образом, чтобы соответствовать вашей структуре. Что означает «не работает»? – Navan

+0

Получите ошибку: MATLAB выражение 'detectSURFFeatures' не соответствует классу: expected 'struct', найденный 'SURFPoints'. Блокировать функцию MATLAB (# 25) При выполнении: нет –

Смежные вопросы