最短距離法による画像分類

入力データと分類クラスの特徴空間における距離を計算し、距離が最短のクラスに入力データを分類します。
距離の定義は、ユークリッド距離を使用する場合は、以下の式によって距離を求めることができます。

    

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];
            }
        }
    }
}

参考文献

アーカイブ