我正在学习numpy/scipy,来自MATLAB背景.Matlab中的xcorr函数有一个可选参数"maxlag",它将滞后范围限制在-maxlag到maxlag之间.如果您正在查看两个非常长的时间序列之间的互相关,但仅对某个时间范围内的相关性感兴趣,这非常有用.考虑到互相关的计算成本非常高,性能的提升是巨大的.
在numpy/scipy中,似乎有几种计算互相关的选项. numpy.correlate,numpy.convolve,scipy.signal.fftconvolve.如果有人想解释它们之间的区别,我会很高兴听到,但主要是令我不安的是它们都没有maxlag功能.这意味着即使我只想看到两个时间序列之间的相关性,例如在-100和+100毫秒之间,它仍将计算-20000和+20000毫秒之间的每个滞后的相关性(这是时间序列).这样可以获得200倍的性能!我是否必须手动重新编码互相关函数以包含此功能?
基本上我想问两件事:
我想出了这个.Octave与Matlab有一些相似之处,所以这个功能的用处很明显,但他们说的其中一个原因是它没有出现在默认输出中.我现在才解决它.那么,也许对此有新见解?
对于第二个问题,在我提到的已回答的问题中,他们只是说它可能在某些计算中发生,并且在我刚刚做的下面的计算中,似乎没有必要使用(或获得)负零.
我遇到的代码是:
xcorr([1 0 1 1], [0 1 1 0 0])
Run Code Online (Sandbox Code Playgroud)
它的输出是:
-0.0000 -0.0000 1.0000 1.0000 1.0000 2.0000 1.0000 0.0000 0.0000
Run Code Online (Sandbox Code Playgroud)
xcorr实际上是一个交叉核心功能,它只进行一些简单的操作,如求和和乘法,在这里可以找到确切的函数细节.无论如何,没有什么比" 复杂的分支切割和复杂平面的转换 "
谢谢
我看过这个问题,但它并没有给我任何答案.
基本上,我如何确定是否存在强相关np.correlate?我期望得到与matlab相同的输出,我可以理解xcorr的coeff选项(1是滞后的强相关,l0是滞后没有相关l),但np.correlate产生大于1的值,即使输入向量已经归一化0和1.
示例输入
import numpy as np
x = np.random.rand(10)
y = np.random.rand(10)
np.correlate(x, y, 'full')
Run Code Online (Sandbox Code Playgroud)
这给出了以下输出:
array([ 0.15711279, 0.24562736, 0.48078652, 0.69477838, 1.07376669,
1.28020871, 1.39717118, 1.78545567, 1.85084435, 1.89776181,
1.92940874, 2.05102884, 1.35671247, 1.54329503, 0.8892999 ,
0.67574802, 0.90464743, 0.20475408, 0.33001517])
Run Code Online (Sandbox Code Playgroud)
如果我不知道最大可能的相关值是什么,我怎么能分辨出什么是强相关性以及什么是弱相关?
另一个例子:
In [10]: x = [0,1,2,1,0,0]
In [11]: y = [0,0,1,2,1,0]
In [12]: np.correlate(x, y, 'full')
Out[12]: array([0, 0, 1, 4, 6, 4, 1, 0, 0, 0, …Run Code Online (Sandbox Code Playgroud) 我在一段时间内拍摄了一系列大致相同的图像.但是,图像中的对象会随着时间的推移而漂移,我想纠正这个问题.这样做有什么好处?
[编辑]好的,我可能要解释为什么我会这样做.我拍摄了一系列不同X射线能量的物体X射线图像.我现在想要比较对象是各种能量,但由于它漂移我必须首先纠正漂移.该对象没有锐利边缘或任何其他易于用于对齐的东西.因此,我正在寻找一种更通用的方法
我想用2来计算2个声音样本的相关系数AForge 2.2.5.
我从这里读到计算交叉相关的公式.
而在这里我读过有关公式计算的相关系数.
这是我现在所拥有的:
在调用CrossCorrelation()之前,已经执行了FFT.
static Complex[] CrossCorrelation(Complex[] ffta, Complex[] fftb)
{
var conj = ffta.Select(i => new Complex(i.Re, -i.Im)).ToArray();
for (int a = 0; a < conj.Length; a++)
conj[a] = Complex.Multiply(conj[a], fftb[a]);
FourierTransform.FFT(conj, FourierTransform.Direction.Backward);
return conj;
}
static double CorrelationCoefficient(Complex[] ffta, Complex[] fftb)
{
var correlation = CrossCorrelation(ffta, fftb);
var a = CrossCorrelation(ffta, ffta);
var b = CrossCorrelation(fftb, fftb);
// Not sure if this part is correct..
var numerator = correlation.Select(i => …Run Code Online (Sandbox Code Playgroud) 我最近开始使用Mathdotnet Numerics统计软件包在c#中进行数据分析。
我正在寻找互相关函数。Mathdotnet是否为此提供API?
以前我一直在使用MATLAB xcorr或Python numpy.correlate。因此,我正在寻找与这些等效的C#。
我浏览了他们的文档,但这不是很简单。 https://numerics.mathdotnet.com/api/
我想使用 de Fast Fourier Transform 计算互相关,按照下图的步骤进行云运动跟踪。
def roi_image(image):
image = cv.imread(image, 0)
roi = image[700:900, 1900:2100]
return roi
def FouTransf(image):
img_f32 = np.float32(image)
d_ft = cv.dft(img_f32, flags = cv.DFT_COMPLEX_OUTPUT)
d_ft_shift = np.fft.fftshift(d_ft)
rows, cols = image.shape
opt_rows = cv.getOptimalDFTSize(rows)
opt_cols = cv.getOptimalDFTSize(cols)
opt_img = np.zeros((opt_rows, opt_cols))
opt_img[:rows, :cols] = image
crow, ccol = opt_rows / 2 , opt_cols / 2
mask = np.zeros((opt_rows, opt_cols, 2), np.uint8)
mask[int(crow-50):int(crow+50), int(ccol-50):int(ccol+50)] = 1
f_mask = d_ft_shift*mask
return f_mask
def inv_FouTransf(image):
f_ishift = np.fft.ifftshift(image) …Run Code Online (Sandbox Code Playgroud) 我使用的语言是R,但你不一定需要知道R来回答这个问题.
问题: 我有一个序列可以被认为是基本事实,而另一个序列是第一个的移位版本,有一些缺失值.我想知道如何调整两者.
建立
我的序列ground.truth基本上是一组时间:
ground.truth <- rep( seq(1,by=4,length.out=10), 5 ) +
rep( seq(0,length.out=5,by=4*10+30), each=10 )
Run Code Online (Sandbox Code Playgroud)
想想ground.truth我正在做以下事情:
{take a sample every 4 seconds for 10 times, then wait 30 seconds} x 5
Run Code Online (Sandbox Code Playgroud)
我有一个第二序列observations,其被ground.truth 移位与缺少的值的20%:
nSamples <- length(ground.truth)
idx_to_keep <- sort(sample( 1:nSamples, .8*nSamples ))
theLag <- runif(1)*100
observations <- ground.truth[idx_to_keep] + theLag
nObs <- length(observations)
Run Code Online (Sandbox Code Playgroud)
如果我绘制这些矢量,这就是它的样子(请记住,将它们视为次数):

我试过的.我想:
theLag在上面的例子中)idx这样的矢量ground.truth[idx] == observations - theLag首先,假设我们知道theLag.请注意,这ground.truth[1] …
我正在编写一些需要比较两个子图像相似性的图像处理技术。我正在使用归一化互相关度量,它返回一个介于 -1 和 +1 之间的值。我应该把这个的绝对值作为我的相似性度量还是负互相关意味着相似性很差?
processing image image-processing correlation cross-correlation
我正在尝试使用来自维基百科(http://en.wikipedia.org/wiki/Phase_correlation)的配方在R中实现二维相位相关算法,以便跟踪两幅图像之间的移动.这些图像(帧)是在风中摇动的相机拍摄的,最终目标是去除这些和后续帧中的抖动.下面是两个示例图像和R代码:

## we will need the tiff library
library(tiff)
## read in the tiff files
f1=as.matrix(readTIFF('f1.tiff',native=TRUE))
f2=as.matrix(readTIFF('f2.tiff',native=TRUE))
## take the fft of the first frame
F1 <- fft(f1)
## take the Conjugate fft of the second frame
F2.c <- Conj(fft(f2))
## calculate the cross power spectrum according to the wiki article
R <- (F1*F2.c)/abs(F1*F2.c)
## take the inverse fft of R
r <- fft(R,inv=TRUE)/length(R)
## because the zero valued imaginary numbers are not needed
r <- Re(r)
## …Run Code Online (Sandbox Code Playgroud)