2016-08-16 5 views
0

В этом исследовании статье в разделе 4.3.1 (core detection),Расчет коэффициента корреляции

enter image description here

Как рассчитать коэффициенты корреляции между двумя пикселями?

public static Complex[,] Correlation(Complex[,]image, Complex[,]mask) 
    { 
     Complex[,] convolve = null; 

     int imageWidth = image.GetLength(0); 
     int imageHeight = image.GetLength(1); 

     int maskWidth = mask.GetLength(0); 
     int maskeHeight = mask.GetLength(1); 

     if (imageWidth == maskWidth && imageHeight == maskeHeight) 
     { 
      FourierTransform ftForImage = new FourierTransform(image); ftForImage.ForwardFFT(); 
      FourierTransform ftForMask = new FourierTransform(mask); ftForMask.ForwardFFT(); 

      Complex[,] fftImage = ftForImage.FourierImageComplex;     
      Complex[,] fftKernel = ftForMask.FourierImageComplex; 

      Complex[,] fftConvolved = new Complex[imageWidth, imageHeight]; 


      for (int j = 0; j < imageHeight; j++) 
      { 
       for (int i = 0; i < imageWidth; i++) 
       { 
        fftConvolved[i,j] = Complex.Conjugate(fftImage[i,j]) * fftKernel[i,j]; 
       } 
      } 

      FourierTransform ftForConv = new FourierTransform(); 

      ftForConv.InverseFFT(fftConvolved); 

      convolve = ftForConv.GrayscaleImageComplex; 

      Rescale(convolve); 

      convolve = FourierShifter.FFTShift(convolve); 
     } 
     else 
     { 
      throw new Exception("padding needed"); 
     } 

     return convolve; 
    } 

Это правильная процедура calculate correlations?

Если да, то как я могу найти коэффициенты корреляции от этого?

+0

корреляция не между двумя пикселями, но между двумя окрестностями вокруг пикселей. –

+0

@AmitayNachmani, do 'Correlation',' Correlation Matching' и 'Cross-correform' представляют одни и те же вещи? То есть умножение комплексных сопряжений? https://en.wikipedia.org/wiki/Cross-correlation#Properties – anonymous

+1

Я не эксперт в этих вещах, но crooss -корреляция измеряет корреляцию между двумя сигналами для разного количества сдвигов. Каждое значение взаимной корреляции (которое является вектором) является корреляцией, измеренной для конкретного сдвига. –

ответ

2

В статье корреляция рассчитывается между двумя «окнами», то есть между двумя наборами точек, а не между двумя точками. если я не ошибаюсь, коэффициент корреляции является скалярным значением, а не вектором. При обработке сигнала корреляция рассчитывается как сумма умножений, деленная на сумму квадратов значений сигнала. Это может быть неправильным в деталях, но в целом, соотношение рассчитывается следующим образом:

correlation = sum(S1[i]*S2[i])/sqrt(sum(S1[i]^2 * S2[i]^2)); 

Для 2-Dimention случая (окно) просто добавить второй индекс:

correlation = sum(S1[i,j]*S2[i,j])/sqrt(sum(S1[i,j]^2 * S2[i,j]^2)); 
+0

Что такое 'S1' и' S2' здесь? – anonymous

+0

S1 и S2 - это два набора значений. Это могут быть значения сигнала или значения пикселей изображения. В вашем случае S1 и S являются «двумя окнами» в этой цитате из вашей статьи: «(ii) cg - это« глобальное »значение корреляции, рассчитанное между двумя окнами, центрированное соответственно в начальной точке pr и в кандидате точка pi столбца k " –

Смежные вопросы