【发布时间】:2020-04-09 04:34:14
【问题描述】:
我正在使用 RGB GOES 卫星图像估计用于风能目的的云位移。我从这篇论文“使用互相关从地球同步卫星数据中获取云运动的自动化技术”中找到了以下方法来实现它。我不知道这是否是计算它的好方法。该代码基本上从傅立叶变换中获取互相关,以计算roi_a 和roi_b 图像之间的云位移。
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img_a = cv.imread('2019.1117.1940.goes-16.rgb.tif', 0)
img_b = cv.imread('2019.1117.1950.goes-16.rgb.tif', 0)
roi_a = img_a[700:900, 1900:2100]
roi_b = img_b[700:900, 1900:2100]
def Fou(image):
fft_roi= np.fft.fft2(image)
return fft_roi
def inv_Fou(C_w):
c_t = np.fft.ifft2(C_w)
c_t = np.abs(c_t)
return c_t
#Step 1: gets the FFT
G_t0 = Fou(roi_a)##t_0
fft_roiA_conj = np.conj(G_t0) #Conjugate
G_t1 = Fou(roi_b)##t_1
#Step 2: Compute C(m, v)
prod = np.dot(fft_roiA_conj, G_t1)
#Step 3: Perform the inverse FFT
inv = inv_Fou(prod)
plt.imshow(inv, cmap = 'gray', )
plt.title('C (m,v) --> Cov(p,q)')
plt.xticks([])
plt.yticks([])
plt.show()
#Step 4: Compute cross correlation coefficient and the maximum cross correlation coefficient
def rms(sigma):
"Compute the standar deviation of an image"
rms = np.std(sigma)
return rms
R_t = inv / (rms(roi_a) * rms(roi_b))
这是我第一次在图像上使用 FFT,所以我对此有一些疑问:
- 我不加fftshift,会不会影响结果?
- 在第 2 步中使用 np.dot 和简单的 '*' 有什么区别,例如
prod = fft_roiA_conj * G_t1 - 如何解释第 3 步的图像结果 (C(m, v) -> Cov (p, q))?
- 如何从
R_t获取最大系数p'和q'(x和y方向的最大系数)?
【问题讨论】:
标签: python image-processing fft cross-correlation