MATLAB转C代码

4
我正在按照MathWorks的指南将MATLAB代码转换为C代码。第一步是在需要转换为C代码的每个函数之后输入

%#codegen

然而,这样做会在下面的代码中给我以下提示。

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”的大小

其中第二次提到了 lanes

该函数的输入参数为:

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

h - 绘制对象的边界,并带有绿色轮廓,同时是一个大小为 1 X length(B) 的矩阵,保存边界的值,如下所示:

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

统计 - 19x1个结构体数组,使用图像处理工具箱的regionprops函数获取,包含以下字段: MajorAxisLength (主轴长度) 和 MinorAxisLength (次轴长度)(对象的)

非常感谢您在帮助我解决此错误方面提供的任何输入。先行致谢!


代码生成在处理方面受到严格限制。您可能需要使用MATLAB编译器(http://www.mathworks.com/products/compiler/)将一些MATLAB代码打包成可部署的独立应用程序。 - Peter
2个回答

5

0
我遇到了类似的错误,即“代码生成不支持通过索引变量大小增长”。 在我的for循环中,我有一个类似的语句,也出现了相同的错误:
y(i) = k;

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

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

我建议你对变量lanes也做同样的操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接