Расчет коэффициента корреляции

В этой исследовательской статье в разделе 4.3.1 (обнаружение ядра),

введите описание изображения здесь

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

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

Это правильная процедура для вычисления корреляций?

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


person user366312    schedule 16.08.2016    source источник
comment
Корреляция не между двумя пикселями, а между двумя окрестностями вокруг пикселей.   -  person Amitay Nachmani    schedule 16.08.2016
comment
@AmitayNachmani, Correlation, Correlation Matching и Cross-correlation представляют одни и те же вещи? То есть умножение комплексно-сопряженных? en.wikipedia.org/wiki/Cross-correlation#Properties   -  person user366312    schedule 16.08.2016
comment
Я не эксперт в этих вещах, но корреляция кривых измеряет корреляцию между двумя сигналами для разного количества сдвигов. Каждое значение взаимной корреляции (которое является вектором) представляет собой корреляцию, измеренную для определенного сдвига.   -  person Amitay Nachmani    schedule 16.08.2016


Ответы (1)


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

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

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

correlation = sum(S1[i,j]*S2[i,j])/sqrt(sum(S1[i,j]^2 * S2[i,j]^2));
person Alexander Kiselev    schedule 16.08.2016
comment
Что здесь S1 и S2? - person user366312; 17.08.2016
comment
S1 и S2 - два набора значений. Это могут быть значения сигнала или значения пикселей изображения. В вашем случае S1 и S - это два окна в этой цитате из вашей статьи: (ii) cg - это «глобальное» значение корреляции, вычисленное между двумя окнами, центрированными, соответственно, в начальной точке pr и в точке кандидата pi столбец k - person Alexander Kiselev; 22.08.2016