如何让matlab在矩阵中聚集?
我需要从两个2D图像重建3D真实空间中的个体。目前,我可以给matlab提供一系列的帧对(左和右)。然后执行以下操作: 1:查找黑色像素: 2:为每个黑色像素计算一个向量 3:搜索向量之间的交叉点 4:为每个交叉点创建数据点 因为鸟的大小从来都不是一个像素那么大,所以它们在三维空间中被重建为平面正方形。X表示宽度Y表示高度,Z表示与摄像机的距离 我现在需要一种方法来减少这些磁盘到集中的单点通过采取这些手段。为了做到这一点,我首先需要对它们进行集群 这三个人被安排在一个完美正方形的角上,因此:X=pdist(a)Y=linkage(X)Z=clust(Y)不起作用,因为你会失去正方形的一个角。我使用下面的代码生成了131个矩阵。每个矩阵告诉您哪个点属于另一个。例如,M{1}{1}告诉您与点1属于同一组的所有点(距离0.2以内的点) 聚类的所有信息都在这些矩阵中,但我需要做以下工作,我不知道如何做。我需要:如何让matlab在矩阵中聚集?,matlab,matrix,cluster-analysis,Matlab,Matrix,Cluster Analysis,我需要从两个2D图像重建3D真实空间中的个体。目前,我可以给matlab提供一系列的帧对(左和右)。然后执行以下操作: 1:查找黑色像素: 2:为每个黑色像素计算一个向量 3:搜索向量之间的交叉点 4:为每个交叉点创建数据点 因为鸟的大小从来都不是一个像素那么大,所以它们在三维空间中被重建为平面正方形。X表示宽度Y表示高度,Z表示与摄像机的距离 我现在需要一种方法来减少这些磁盘到集中的单点通过采取这些手段。为了做到这一点,我首先需要对它们进行集群 这三个人被安排在一个完美正方形的角上,因此:X=
[30,30300][30,30600][60,30600][X,Y,Z]
[X,Y,Z] data:
[X] 29.8000
29.9000
30.0000
30.1000
30.2000
59.8000
59.9000
60.0000
60.1000
60.2000
29.8000
29.9000
30.0000
30.1000
30.2000
[Y]29.8000
29.8000
29.8000
29.8000
29.8000
29.8000
29.8000
29.8000
29.8000
29.8000
29.9000
29.9000
29.9000
29.9000
29.9000
[Z]599.7336
599.7336
599.7336
599.7336
599.7336
599.7336
599.7336
599.7336
599.7336
599.7336
599.7336
599.7336
599.7336
599.7336
599.7336
本例中的dCell为1
for k=1:length(dCell)
A{k}=[X{k},Y{k},Z{k}]; As{k}=sortrows(A{k});
end
for m=1:length(As{k}(:,1))
B{k}{m}=As{k}(m)-As{k}(:,1);
C{k}{m}=As{k}(m,2)-As{k}(:,2);
E{k}{m}=As{k}(m,3)-As{k}(:,3);
M{k}{m}=[B{k}{m},C{k}{m},E{k}{m}];
end
数据需要在单元格数组中,因为整个过程中都会出现维度不匹配。这些簇是分开的吗?我的意思是:你有131个数据点,你用来计算131个矩阵,其中包含所有数据点,这些数据点在你对每个点的接受程度之内。是否可能,您有类似于[1 1.2 1.4 1.6 1.8]的分数,lvl接受度为0.2。然后在每个矩阵中(除了角)有3个条目。你会得到总位移为0.2的簇。我的意思是,如果你按照你在3点中所说的去做。这可能是因为您不会将所有131个数据点分为3个集群[续…],也可能是一些数据点分布在2个集群中,而不仅仅是oneDo
A
,As
,X
Y
,B
,C
,E
,M
必须是单元阵列?您似乎无缘无故地将单个值存储在单元格数组中。它们也可以是矩阵。这会让事情变得更简单。请你发布几行样本数据。不,更新你的问题并完成它。你应该创建一个