入力データと分類クラスの特徴空間における距離を計算し、距離が最短のクラスに入力データを分類します。
距離の定義は、ユークリッド距離を使用する場合は、以下の式によって距離を求めることができます。
RGB画像の場合は、上の式のKは3になります。
各分類クラスの平均ベクトルが与えられている場合、分類は以下のようにします。
/* RGB画像に対する最短距離法による分類 btIn : 入力画像 btOut : 出力画像 nRow : 画像の行 nCol : 画像の列 nCh : チャンネル数 nClass : 分類クラス数 daaMeanVect : 各分類クラスの平均ベクトル btClassColor : 各分類クラスの出力時の色 */ void classify_nearest ( BYTE *btIn, BYTE *btOut, int nRow, int nCol, int nCh, int nClass, double **daaMeanVect, BYTE **btClassColor ) { int i, j, k, l; double dDist, dMinDist; int nNearestClass; for ( i = 0; i < nRow; i++ ) { for ( j = 0; j < nCol; j++ ) { dMinDist = 0.99E+37; for ( k = 0; k < nClass; k++ ) { dDist = 0.0; for ( l = 0; l < nCh; l++ ) { dDist += pow( (btIn[i*nCol*nCh+j*nCh+l] - daaMeanVect[k][l]), 2 ); } if ( dDist < dMinDist ) { dMinDist = dDist; nNearestClass = k; } } for ( l = 0; l < nCh; l++ ) { btOut[i*nCol*nCh+j*nCh+l] = btClassColor[nNearestClass][l]; } } } }