2017-12-05 25 views
0
#pragma omp parallel for num_threads(6) 
      for (int m = 0; m < k_num; m++) {  
       Point(0, 0) = double(data3[j * 3]) - mean1[m].at<double>(0, 0); 
       Point(0, 1) = double(data3[j * 3 + 1]) - mean1[m].at<double>(0, 1); 
       Point(0, 2) = double(data3[j * 3 + 2]) - mean1[m].at<double>(0, 2); 

       end = Point * inv[m] * Point.t(); 
       distance = sqrt(end(0, 0)); 
       if (distance < min && distance>0) {  
        color = m; 
        class_success++; 
        // color_map[i + left_y][j + left_x] = color; 
        data2[(j + left_x) * 3] = lab_k[m][0]; 
        data2[(j + left_x) * 3 + 1] = lab_k[m][1]; 
        data2[(j + left_x) * 3 + 2] = lab_k[m][2]; 
        data4[j * 3] = lab_k[m][0]; 
        data4[j * 3 + 1] = lab_k[m][1]; 
        data4[j * 3 + 2] = lab_k[m][2]; 
       } 
      } 

私はイメージ内のすべてのピクセルを走査し、それらとカラーモ​​デル間のマハラノビス距離を計算しようとします。 (i,j)はポイント座標です。私はコードをチェックし、すべての変数は相互に関係すべきではありませんが、私がopenmpを使用すると結果は異なります。どうもありがとう。私のコードでOpenMpを使用し、エラーの結果を得る

+0

"結果は異なる":コンピュータの浮動小数点乗算の結果は、その順序に依存します。ですから、シングルスレッドとマルチスレッドの計算の結果が異なる可能性はあります。しかし、これが唯一の理由であるかどうかは不明です。 – Micka

+0

ありがとう、しかし、分類の違いの結果は広く、私は割り当てに問題があるかもしれないと思う、変数はプライベートまたは共有ですか?私はわかりません。 –

+1

[cv :: Mahalanobis](https://docs.opencv.org/3.3.1/d2/de8/group__core__array.html#ga4493aee129179459cbfc6064f051aa7d)を使用してみませんか? – Nayfe

答えて

0

問題は変数がプライベートなので、ループの本体の中に変数を宣言し、正しいrsultを取得します。

#pragma omp parallel for num_threads(6) 
      for (int m = 0; m < k_num; m++) {  
       Mat_<double>end(1, 1); 
       double distance = 1000; 
       Mat_<double>Point(1, 3); 
       .... 
       } 
      } 
関連する問題