我有两个相同大小的列向量X和Y,它们是通过遵循Matlab代码得出的:
mask = im2bw(rgb2gray(imread('http://i.stack.imgur.com/ES8w1.jpg')));
separation = bwulterode(mask,'euclidean',[0 0 0; 1 1 1; 0 0 0]).*mask;
[X, Y] = find(separation);
imshow(mask); hold on; plot(Y, X, '.r');
X中的每个元素在Y中都有一个对应的元素。我需要删除X中的重复值以及它们在Y中的对应值,而不重新排列元素的顺序。我使用此代码,但它不会删除重复元素。问题是什么?
A=[X,Y];
[UniXY,Index]=unique(A,'rows','first');
DupIndex=setdiff(1:size(A,1),Index);
A(DupIndex,:)=[];
X=A(:,1);
Y=A(:,2);
figure; imshow(mask); hold on; plot(Y, X, '.r');
感谢任何帮助。
答案 0 :(得分:1)
您可以尝试将unique
与'stable'
参数应用于X,并使用提取的索引来提取相应的Y值。
% 'stable' argument preserves ordering
[Xfixed, ind] = unique(X, 'stable');
% ind now holds the indices of the unique elements
YFixed = Y(ind);
在您的代码中,调用unique(A, 'rows', 'first')
不会保留元素的排序。如果相应的Y值不同,它也不会删除X的重复值。但是,如果2个相同的X值始终对应于2个相同的Y值,那么您所要求的只需
A = unique([X Y], 'rows', 'stable');