MATLAB:如何找到重复元素的坐标?

MATLAB: How to find the coordinates of the repeating elements?

我有两个大小相同的列向量 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 中都有对应的元素。我使用以下代码(@VHarisop)删除了 X 中的重复值以及它们在 Y 中的对应值:

% 'stable' argument preserves ordering
[Xfixed, ind] = unique(X, 'stable');
% ind now holds the indices of the unique elements
Yfixed = Y(ind);

我需要找到重复元素的坐标:分别不在Xfixed和Yfixed中的X和Y的元素。感谢任何帮助。

如果 ind 包含 Xfixed 中每个唯一值的 个位置,只需创建一个从 1 到 X 是,并使用 ind 从该向量中消除这些条目。其结果将是一个向量,其中包含 Xfixed 中的非唯一条目。因此,尝试做:

val = 1 : numel(X);
val(ind) = [];
Xfinal = X(val);
Yfinal = Y(val);

前两行代码就是我之前说的。 val 将包含那些不包含唯一元素的索引。然后我们将使用 val 索引到 XY 来获取我们的内容,这些内容存储在 XfinalYfinal.


这是一个例子:

X = [1 1 1 2 2 3 3 3 4 4 5 5 6 6 7 7 7 8 8]; %// Example data
Y = [9 8 7 6 5 4 2 1 3 5 6 7 8 9 9 8 8 0 0];

[Xfixed, ind] = unique(X, 'stable');  %// Your code

%// New code
val = 1 : numel(X);
val(ind) = [];
Xfinal = X(val);
Yfinal = Y(val);

显示 valXfinalYfinal 是什么,我们得到:

>> Xfinal

Xfinal =

     1     1     2     3     3     4     5     6     7     7     8

>> Yfinal

Yfinal =

     8     7     5     2     1     5     7     9     8     8     0

>> val

val =

     2     3     5     7     8    10    12    14    16    17    19

如果我们也检查 ind,我们得到:

ind =

     1
     4
     6
     9
    11
    13
    15
    18

ind 包含唯一且第一次遇到的条目。这意味着 val 包含其他不唯一的条目。您将使用 val 索引到 X 并使用 Y 检索那些非唯一值。如果您查看 val 并将其与 X 中的每个对应位置进行比较,您会发现这些对应于非唯一位置,我们 select 这些来自 X以及Y.

中对应的位置

最后三行查找完整索引列表的补集和 unique 函数提供的索引。

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');

[Xfixed, ind] = unique(X, 'stable');

Yfixed = Y(ind);

ind_repeat=setdiff(1:1:size(X,1),ind);

Xrepeat=X(ind_repeat);

Yrepeat=Y(ind_repeat);