4

我正在按照 MathWorks 指南将 MATLAB 代码转换为 C 代码。第一步是进入

%#代码生成

在我想要转换为 C 代码的每个函数之后,但是这样做在下面的代码中给了我以下提示。

function lanes=find_lanes(B,h, stats)
% Find the regions that look like lanes
%#codegen

lanes = {};
l=0;
    for k = 1:length(B)
    metric = stats(k).MajorAxisLength/stats(k).MinorAxisLength;
    %testlane(k);
    %end
    %function testlane(k)
        coder.inline('never');
        if metric > 5 & all(B{k}(:,1)>100)
            l=l+1;
            lanes(l,:)=B(k);
        else
            delete(h(k))
        end
    end
end

花括号周围:

代码生成仅支持“varargin”和“varargout”的单元格操作

另一个提示说

代码生成不支持通过索引增加可变“通道”大小

第二次提到lanes的地方。

该函数的输入参数是:

B - 是bwboundaries图像处理工具箱函数的输出。它是一个P×1 元胞数组,其中 P 是对象和孔的数量。元胞数组中的每个元胞都包含一个 Q×2 矩阵。矩阵中的每一行都包含一个边界像素的行和列坐标。Q 是对应区域的边界像素数。

h - 使用绿色轮廓绘制对象的边界,同时是大小为 1 X 长度(B)的矩阵,保存边界值,如下所示:

h(K)=plot(boundary(:,2), boundary(:,1), 'g', 'LineWidth', 2);//boundary(:,1) - Y coordinate, boundary(:,2) - X coordinate.

stats -使用图像处理工具箱中的regionprops函数获取的19x1 结构数组,其中包含以下字段:MajorAxisLength 和 MinorAxisLength(对象的)

我非常感谢您在帮助我清除此错误时提供的任何意见。提前致谢!

4

2 回答 2

5

关于您的代码生成的几点 -

  1. MATLAB 和 Image Processing Toolbox 中只有一部分函数支持代码生成 - Image Processing Toolbox 支持代码生成

  2. 元胞数组尚不支持代码生成 -元胞数组支持

  3. 在您的代码中,您的变量似乎正在增长,即数组的初始大小无法支持您的工作流程。您应该遵循可变大小输入的代码生成

于 2013-12-09T19:32:33.960 回答
0

我有一个类似的错误,即代码生成不支持通过索引进行可变大小增长。在我的 for 循环中,我有一个这样的语句,它有同样的错误:

y(i) = k;

我引入了一个临时存储变量 u 并将我的代码修改为:

u = y;
u(i) = k;
y = u;

我建议你对可变车道做同样的事情。

于 2020-11-02T17:35:43.977 回答