Вычислить корреляцию двух файлов Mat в OpenCV

У меня есть вектор файлов Mat, и я хочу вычислить корреляцию между ними, чтобы сохранить два файла mat, с которыми теоретически схожи. На самом деле в этом векторе хранятся обнаруженные глаза из изображений, поэтому я пытаюсь удалить выбросы. Как можно рассчитать корреляцию между двумя файлами Mat ???

РЕДАКТИРОВАТЬ:

Mat Detection::hist_calculation(Mat image){

// Establish the number of bins
int histSize = 256;

// Set the ranges
float range[] = { 0, 256 } ;
const float* histRange = { range };

bool uniform = true; bool accumulate = false;

Mat hist;

// Compute the histograms:
calcHist( &image, 1, 0, Mat(), hist, 1, &histSize, &histRange, uniform, accumulate );// Draw the histograms for B, G and R
int hist_w = 512; int hist_h = 400;
int bin_w = cvRound( (double) hist_w/histSize );

Mat histImage( hist_h, hist_w, CV_8UC3, Scalar( 0,0,0) );

normalize(hist, hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );

for( int i = 1; i < histSize; i++ )
{
line( histImage, Point( bin_w*(i-1), hist_h - cvRound(hist.at<float>(i-1)) ) ,
Point( bin_w*(i),   hist_h - cvRound(hist.at<float>(i))   ) ,
Scalar( 255, 0, 0), 2, 8, 0  );
}

//// Display
//namedWindow("calcHist Demo", CV_WINDOW_AUTOSIZE );
//imshow("calcHist Demo", histImage );
//waitKey(0);

return hist;
}

double Detection::cvMatHistCorrelation(Mat file1, Mat file2) {

cvtColor(file1, file1, CV_BGR2GRAY); cvtColor(file2, file2, CV_BGR2GRAY);
Mat hist1 = hist_calculation(file1);
Mat hist2 = hist_calculation(file2);

double autoCorrelation1 = compareHist( hist1, hist1, CV_COMP_BHATTACHARYYA );
double autoCorrelation2 = compareHist( hist1, hist1, CV_COMP_BHATTACHARYYA );
double correlation  = compareHist( hist1, hist2, CV_COMP_BHATTACHARYYA );

cout << "autocorrelation of his1: "<< autoCorrelation1 << endl;
cout << "autocorrelation of hist2: "<< autoCorrelation2 << endl;
cout << "correlation between hist1 and hist2: "<< autoCorrelation << endl;

return correlation;
}

Я думаю, что это работает отлично.

2

Решение

Лучше вычислять корреляцию векторов признаков этих двух файлов Mat, а не непосредственно на данных Mat.

Например, вы можете сначала вычислить цветовую гистограмму RGB / HSV (24-мерный вектор, если для каждого канала используется 8 бинов) для каждого файла Mat, а затем вычислить корреляцию этих двух векторов гистограммы.

4

Другие решения

Других решений пока нет …