我正在做一些图像处理,我必须操纵 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()索引,但没有运气。
我希望有人能给我一个暗示如何做到这一点 提前谢谢。
答案 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
对应于您问题中的三组唯一线(A
,B
,C
。