#matlab #simulink
#matlab #simulink
Вопрос:
Я написал фрагмент кода, включающий функцию bwconncomp(), которая отлично работает на моих компьютерах matlab. Однако, когда код был помещен в блок simulink на другом компьютере (с той же версией), я получил сообщение об ошибке
Точечная нотация при вызове возвращаемого значения функции не допускается.1
Когда я пытаюсь добавить дополнительную строку, в которой я вызываю функцию, а затем точечную нотацию, выбирая нужный элемент, я все равно получаю сообщение об ошибке. Знаете ли вы, что может пойти не так?
function [cleaned_matrix] = pathFindingV2(matrix)
% find height and width of matrix to be cleaned
[HEIGHT,WIDTH] = size(matrix);
% Finds each cluster where a cluster is defined as a blob of trues that
% are connected to eachother
clusters = bwconncomp(matrix, 4).PixelIdxList;
% Choose largest cluster as main path
mainClusterIdxs = [];
maxLength = 0;
for k=1:length(clusters)
if length(clusters{k}) > maxLength
maxLength = length(clusters{k});
mainClusterIdxs = clusters{k};
end
end
% Convert index list to a matrix form
length1 = HEIGHT * WIDTH;
cleaned_matrix = zeros(length1, 1);
cleaned_matrix(mainClusterIdxs) = 1;
cleaned_matrix = reshape(cleaned_matrix, [HEIGHT, WIDTH]);
завершение
Приведенный выше алгоритм (работает в matlab, а не в simulink) принимает матрицу, находит и сохраняет самый большой кластер и устанавливает для всех остальных ячеек значение 0.
Любая помощь будет оценена, я часами бился головой о стену
Комментарии:
1.
bwconncomp(matrix, 4).PixelIdxList
разрешена только с R2020a или R2020b. Возможно ли, что система, в которой вы запускаете Simulink, имеет более старую версию MATLAB?2. Спасибо за помощь, однако на обоих компьютерах установлена одна и та же версия, так что это не проблема : (. В итоге я просто написал свою собственную версию функции.