средние значения, стандартное отклонение, дисперсия и асимметрия изображения

Этот код разбивает изображения на более мелкие плитки, находит среднее значение этих плиток и записывает эти значения в файл. я тоже хочу рассчитать дисперсию и асимметрию. пожалуйста помоги

for (int r = 0; r < img.rows; r += m)
    for (int c = 0; c < img.cols; c += n)
    {
        Mat tile = img(Range(r, min(r + m, img.rows)),
            Range(c, min(c + n, img.cols)));

        Scalar MScalar,StdScalar;  
        meanStdDev(tile,MScalar,StdScalar);
        cout<<"\n Blue Channel Avg is "<<MScalar.val[0];
        cout<<"\n Green Channel Avg is "<<MScalar. val[1];
        cout<<"\n Red Channel Avg is "<<MScalar. val[2];     
        cout<<"\nBlue channel std dev is "<<StdScalar.val[0];
        cout<<"\nGreen Channel std dev is "<<StdScalar. val[1];
        cout<<"\nRed Channel std dev is "<<StdScalar. val[2]<<"\n";
        int m[6] = { MScalar.val[0], MScalar.val[1], MScalar.val[2], StdScalar.val[0],  StdScalar.val[1], StdScalar.val[2] };
        Mat M = Mat(1, 6, CV_32S, m);
        outdata<< M << "\n";
        cout<<M<<endl; 

    }
    outdata<<endl;
 }
}

waitKey(); 

return 0; 
}

person swetha    schedule 20.03.2014    source источник
comment
А твоя проблема...?   -  person herohuyongtao    schedule 20.03.2014
comment
Поэтому найдите формулы для дисперсии и асимметрии и примените их. Дисперсия тривиальна, так как у вас уже есть стандартное отклонение. Асимметрия может быть немного сложнее.   -  person molbdnilo    schedule 20.03.2014
comment
есть ли встроенная функция для дисперсии, аналогичная среднему и стандартному dev в opencv?   -  person swetha    schedule 20.03.2014


Ответы (1)


Цитата из: http://en.wikipedia.org/wiki/Standard_deviation

«Другими словами, стандартное отклонение σ (сигма) — это квадратный корень из дисперсии X».

Это означает, что если у вас есть стандартное отклонение, все, что вам нужно сделать, это std * std, чтобы получить дисперсию.

Что касается перекоса: http://en.wikipedia.org/wiki/Перекос

Вы можете видеть из формулы, что вам нужно сделать, это сумма значения минус среднее значение и разделить его на стандартное значение, все это в степени 3.

Пример для канала hue:

float skewness;
for (int x = 0; x<channelHue.rows; x++) {
    for (int y = 0; y<channelHue.cols; y++) {
        skewness += pow(((channelHue.at<int>(x, y) - mean)/std), 3);
    }
} 
person David Pascoal    schedule 15.04.2014