【问题标题】:How can i show clustered image after kmeans?如何在 kmeans 之后显示聚类图像?
【发布时间】:2016-07-12 06:32:19
【问题描述】:

我想使用一个数组作为 k 均值算法的输入。该数组具有 x 和 y 方向的位移值,是 Lucas Kanade 光流估计的结果。代码如下:

已编辑:

int number_of_features=150;
// Lucas Kanade optical flow 
cvCalcOpticalFlowPyrLK(frame1_1C,frame2_1C,pyramid1,pyramid2,frame1_features,frame2_features,number_of_features,optical_flow_window, 5,optical_flow_found_feature, optical_flow_feature_error,optical_flow_termination_criteria, 0 );

float Dx[150],Dy[150]; // displacement matrices
float  Dis[150][2]; // total displacement matrix

int K=2; // clusters selected
Mat bestLabels, centers;

for(int i = 0; i < number_of_features; i++)
{
CvPoint p,q;
p.x = (int) frame1_features[i].x;
p.y = (int) frame1_features[i].y;
q.x = (int) frame2_features[i].x;
q.y = (int) frame2_features[i].y;

//displacements
Dx[i]=p.x-q.x;
Dy[i]=p.y-q.y;

Dis[i][0] = Dx[i];
Dis[i][1] = Dy[i];

}


// k means algorithm


// Creating Mat for Input data
cv::Mat flt_Dis(150, 2, CV_32F, Dis);

cv::kmeans(flt_Dis, K, bestLabels,TermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 10, 1.0),3, KMEANS_PP_CENTERS, centers);

我已经解决了我之前的问题,现在我想显示集群图像。我猜 bestLabels 存储每个元素的索引,例如如果它被归类为第 0 类或第 1 类。我对吗 ??如何显示集群图像?

【问题讨论】:

  • 如果您想获得帮助,请花更多时间格式化代码并提供有关您的问题的所有信息。 cv::kmeans 是什么? cvCalcOpticalFlowPyrLK ?等
  • 我认为有图像处理经验的人可以理解。 cv::kmeans 是 kmeans 算法,而 cvCalcOpticalFlowPyrLK 是使用 Lucas Kanade 方法估计稀疏点集上的光流的函数。
  • 不,你不能。只需使用“matrix.convertTo(flt_matrix, CV_32F)”将您的矩阵转换为浮点类型,然后使用它
  • 我不确定它是否有效.. 我试过这个:cv::Mat flt_Dis(150, 2, CV_32F, Dis);
  • 不,你需要 convertTo

标签: c++ opencv type-conversion k-means


【解决方案1】:

K-means 可以实现来处理整数。你只需要这样做。

结果不会是整数。

【讨论】:

  • 你的意思是像上面建议的那样吗?
  • 不,cmets 中的建议是将您的数据转换为浮点数,然后运行 ​​cv::kmeans。我的建议是写yourown::integerkmeans
  • 你能解释一下上面的代码出了什么问题吗?
  • 你有一个整数矩阵,但函数需要一个浮点矩阵。因此,一个错误。
猜你喜欢
  • 2019-11-20
  • 2013-03-24
  • 2013-02-22
  • 1970-01-01
  • 2017-04-28
  • 2020-11-03
  • 2015-11-20
  • 1970-01-01
  • 2013-03-23
相关资源
最近更新 更多