gpt4 book ai didi

MATLAB parfor 切片问题?

转载 作者:太空宇宙 更新时间:2023-11-03 19:23:49 26 4
gpt4 key购买 nike

我有一段代码可以在一系列图像中找到哈里斯角点。我需要对 92 张图像执行此操作,但速度相当慢。因此,我想并行运行代码。我下面的代码有一个与变量“corners”相关的错误

%% Harris corners
max_pts = 900;
corners = zeros(max_pts,2,size(images,3));
parfor i = 1:size(images,3)
I = images(:,:,i);
[y x] = get_corners(I,max_pts);
corners(1:length(y),:,i) = [y x];
end

上面写着:

MATLAB 在 parfor 函数中运行循环,方法是将循环迭代分组,然后将它们发送到并行运行的 MATLAB worker。为了让 MATLAB 以可重复、可靠的方式执行此操作,它必须能够对循环中使用的所有变量进行分类。该代码以与分类不兼容的方式使用指示变量。 建议的操作修复指示变量的用法。有关变量分类和 parfor 循环迭代的其他限制的详细信息,请参阅并行计算工具箱文档中的“变量分类”。

有什么办法解决这个问题吗?

谢谢!

最佳答案

@Chris 所述, 线

corners(1:length(y),:,i) = [y x];

是问题所在。确保角落可切片的一种简单方法是使用元胞数组

max_pts = 900;
cornerCell = cell(size(images,3),1);
parfor i = 1:size(images,3)
I = images(:,:,i);
[y x] = get_corners(I,max_pts);
cornerCell{i} = [y x];
end

如果你不希望 corners 是一个元胞数组(请注意,要为第 i 个图像绘制角,你可以调用 imshow(images(:,:,i),[]),等等, plot(cornerCell{i}(:,1),cornerCell{i}(:,2),'o')),您始终可以转换回原始的 900×2×nImages 数组在一个不会花费您任何明显时间的循环中:

corners = zeros(max_pts,2,size(images,3));
for i=1:size(images,3)
corners(1:size(cornerCell{i},1),:,i) = cornerCell{i};
end

关于MATLAB parfor 切片问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5207667/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com