从struct数组中提取行

时间:2014-01-20 17:25:07

标签: arrays matlab data-structures struct

我正在做一些图像处理,我必须操纵 houghlines()的结果并手动连接一些行。

以下 houghlines() -result被赋予(我缩短了point1和point2的条目以保持清晰)

lines(1) = struct('theta', 69, 'rho', 14);
lines(2) = struct('theta', 70, 'rho', 32);
lines(3) = struct('theta', 69, 'rho', 14);
lines(4) = struct('theta', 69, 'rho', 20);
lines(5) = struct('theta', 70, 'rho', 32);

现在,如果theta和rho的值相等,我想提取特定行,以便稍后可以手动连接Houghlines。 结果应该是行结构的相应行。像这样:

A = [lines(1) lines(3)];
B = [lines(2) lines(5)];
C = [lines(4)];

我无法像上面的代码那样明确解决问题,因为 houglines()会应用于视频。这意味着 theta rho 的值甚至的长度对于每个帧都是不同的。 所以这必须动态评估。

我发现使用FileExchange中的 nestedStruct(),我可以先用theta然后用rho对我的结构进行排序。在这一点,我无法反汇编结构,因为我不知道我必须为结果结构采取多少元素。
我还尝试了 unique()索引,但没有运气。

我希望有人能给我一个暗示如何做到这一点 提前谢谢。

1 个答案:

答案 0 :(得分:0)

请考虑以下代码:

% sample 1x5 structure array
clear lines
lines(1) = struct('theta', 69, 'rho', 14);
lines(2) = struct('theta', 70, 'rho', 32);
lines(3) = struct('theta', 69, 'rho', 14);
lines(4) = struct('theta', 69, 'rho', 20);
lines(5) = struct('theta', 70, 'rho', 32);

% build a two-columns matrix of theta/rho values
t = [lines.theta];
r = [lines.rho];
rows = [t(:) r(:)];

% find unique rows. ind will be an array of indices
% (ranging from 1 to number of unique rows)
[~,~,ind] = unique(rows, 'rows');
for i=1:max(ind)
    % indices of structs with equal theta/rho values
    idx = find(ind == i)

    % extract those structs and do something useful with them
    s = lines(idx);
    % ...
end

在上面的例子中,找到的分组索引是:

idx =
     1
     3
idx =
     4
idx =
     2
     5

对应于您问题中的三组唯一线(ABC