如何量化图像的不对称性?
信息处理
图片
2022-02-09 23:43:31
2个回答
如果图像关于中心是“偶数”并且是真实的,则如果中心设置为原点,则傅里叶变换将是真实的。DFT 从原点开始,因此结果将是样本上的线性相位。我们可以去掉线性相位,然后测试结果是否有任何虚部。将真实与想象进行比较将揭示不对称的程度。
对于线性 DFT(图像的一行或一列),可以通过以下方式完成:
import scipy.fftpack as fft
import numpy as np
n = len(row)
result = fft.fft(row) * np.exp(1j* np.arange(n) * 4*np.pi/n)
遵循上述模式可以扩展到 2D FFT。(图像需要完全以图像的原点为中心才能对称)。
我做了一个简单的 2D 示例来演示,上面是图像,下面是补偿线性相位偏移后的 2D FFT,紫色表示 0,黄色表示最大值:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as img
f = np.zeros((5,5))
f[2,2] = 15
plt.figure()
plt.imshow(f)
row = np.exp(1j*np.arange(5)*4*np.pi/5)
col = np.exp(1j*np.arange(5)*4*np.pi/5)
grid = col[:, None] * row[None, :]
H1 = np.fft.fft2(f)
vmin=0
vmax=15
fig, axs = plt.subplots(1, 3, figsize=(5, 3))
plt.subplot(1,3,1)
plt.title("Magnitude")
plt.imshow(np.abs(test), vmin=vmin, vmax=vmax)
plt.subplot(1,3,2)
plt.title("Real")
plt.imshow(np.real(test), vmin=vmin, vmax=vmax)
plt.subplot(1,3,3)
plt.title("Imag")
plt.imshow(np.imag(test), vmin=vmin, vmax=vmax)
对于偏移图像,将 f[2,2]=15 行替换为 f[3,3]=15。OP 的图像不是完全对称的,因此结果不会有零虚部。评估 FFT 结果中所有像素的平均相位角应提供与不对称性成比例的合理度量。
您可以做的最简单的事情就是将图像翻转到要量化对称性的轴上,并将结果与原始图像进行比较。简单的成对图像比较可以是相关性、均方误差 (MSE)、SSIM 或任何其他方法。您最喜欢的图像处理库应该至少实现了一些不同的图像对比较算法。
其它你可能感兴趣的问题