Я просто хочу взять 3×3 соседнее окно изображения и заменить среднее значение центральным пикселем и вычислить среднее значение, дисперсию, энтропию, чтобы сделать вектор признаков в c ++. Opencv Я делаю что-то не так, пожалуйста, предложите мне эти функции для классификации.
cv::Mat ppa::find_win(cv::Mat wav, int win_size){ //
wav.convertTo(wav, CV_64F); // convert intto float
Mat varMap = Mat::zeros(wav.rows,wav.cols,wav.type()); // padding to avoid extra pixels
int border = ceil(win_size/2); // round off border
for(int i=border;i<=wav.rows-border-1;i++)
{
for(int j=border;j<=wav.cols-border-1;j++)
{
Rect win;
// cout<<i<<" "<< j<<endl;
win.x = j-border; win.y = i-border;
win.width = win_size;win.height = win_size;
cv ::Mat window = wav(win); // return the window of the
cv::Mat win1;
window.copyTo(win1);
cv:Scalar tempVal = mean(win1);
float myMAtMean = tempVal.val[0];
win1.at<double>(i,j) = myMAtMean; /// replaced central pixel with mean value of neighbor pixel
//............................ calculate mean var of the returned windows.......................................
cv::transpose(window,window);
window.convertTo(window, CV_64F);
arma::mat Ig_arma( reinterpret_cast<double*>(window.data), window.cols, window.rows );
arma::mat mn = arma::mean(Ig_arma); //
arma::mat vr = var(Ig_arma); // varience
double en = calculateEnergy(Ig_arma); // energy
}
}
return win1;
}
Задача ещё не решена.
Других решений пока нет …