|
|
@ -169,7 +169,7 @@ static void generateCentersPP(const Mat& _data, Mat& _out_centers, |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void cv::ocl::DistanceComputer(oclMat &dists, oclMat &labels, const oclMat &src, const oclMat ¢ers) |
|
|
|
void cv::ocl::distanceToCenters(oclMat &dists, oclMat &labels, const oclMat &src, const oclMat ¢ers) |
|
|
|
{ |
|
|
|
{ |
|
|
|
//if(src.clCxt -> impl -> double_support == 0 && src.type() == CV_64F)
|
|
|
|
//if(src.clCxt -> impl -> double_support == 0 && src.type() == CV_64F)
|
|
|
|
//{
|
|
|
|
//{
|
|
|
@ -179,7 +179,7 @@ void cv::ocl::DistanceComputer(oclMat &dists, oclMat &labels, const oclMat &src, |
|
|
|
|
|
|
|
|
|
|
|
Context *clCxt = src.clCxt; |
|
|
|
Context *clCxt = src.clCxt; |
|
|
|
int labels_step = (int)(labels.step/labels.elemSize()); |
|
|
|
int labels_step = (int)(labels.step/labels.elemSize()); |
|
|
|
string kernelname = "kmeansComputeDistance"; |
|
|
|
string kernelname = "distanceToCenters"; |
|
|
|
int threadNum = src.rows > 256 ? 256 : src.rows; |
|
|
|
int threadNum = src.rows > 256 ? 256 : src.rows; |
|
|
|
size_t localThreads[3] = {1, threadNum, 1}; |
|
|
|
size_t localThreads[3] = {1, threadNum, 1}; |
|
|
|
size_t globalThreads[3] = {1, src.rows, 1}; |
|
|
|
size_t globalThreads[3] = {1, src.rows, 1}; |
|
|
@ -413,7 +413,7 @@ double cv::ocl::kmeans(const oclMat &_src, int K, oclMat &_bestLabels, |
|
|
|
|
|
|
|
|
|
|
|
_bestLabels.upload(_labels); |
|
|
|
_bestLabels.upload(_labels); |
|
|
|
_centers.upload(centers); |
|
|
|
_centers.upload(centers); |
|
|
|
DistanceComputer(_dists, _bestLabels, _src, _centers); |
|
|
|
distanceToCenters(_dists, _bestLabels, _src, _centers); |
|
|
|
|
|
|
|
|
|
|
|
Mat dists; |
|
|
|
Mat dists; |
|
|
|
_dists.download(dists); |
|
|
|
_dists.download(dists); |
|
|
|