MATLAB: How to replace Nonscalar struct for Matlab Coder error

errormatlab coder

Hi,
When I'm trying to transform my Matlab code to C, this error appeared yet I don't know how to modify it as it necessary in my function.
%% Remove small objects.
binaryImage = imclearborder(binaryImage);
binaryImage = bwareaopen(binaryImage, 100);
%% Invert the binarized image
% binaryImage = ~ binaryImage;
%% Get centroid on image
stats = regionprops(binaryImage, 'Centroid'); % acting on the cleaned image
centroids = cat(1, stats.Centroid);
x1 = centroids(1,1);
y1 = centroids(1,2);
x3 = centroids(3,1);
y3 = centroids(3,2);
The error " Directly accessing field or property of nonscalar struct or object not supported for code generation" showed at
centroids = cat(1, stats.Centroid);
How I can resolved it as it is necessary for my function.

Best Answer

  • centroids = cat(1, stats.Centroid);
    is just concatenating the centroid row vectors in the first dimension (vertical), which can be replaced by a loop:
    numRegions = numel(stats);
    centroids = zeros(numRegions, numel(stats(1).Centroid)); % pre-initialize to set size
    for region = 1:numRegions
    centroids(region, :) = stats(region).Centroid; % write one row at a time
    end
    We are looking to allow the original syntax in a future release of MATLAB Coder!