确定图像是否模糊

A.P*_*cat 5 c# image fft image-processing

我看到了很多与此相关的主题,我了解了理论,但无法对此进行编码。

我有一些图片,我想确定它们是否模糊。我找到了一个库(aforge.dll),并用它来对图像进行FFT 运算

例如,我正在处理两个图像:

在此处输入图片说明

我的代码在c#中:

public Bitmap PerformFFT(Bitmap Picture)
{
    //Loade Image
    ComplexImage output = ComplexImage.FromBitmap(Picture);

    // Perform FFT
    output.ForwardFourierTransform();

    // return image
    return = output.ToBitmap();
}
Run Code Online (Sandbox Code Playgroud)

如何确定图像是否模糊?我对理论不太满意,我需要具体的例子。我看到了这篇文章,但我不知道该怎么做。

编辑:

我会澄清我的问题。当我有一个复数的2D数组ComplexImage output(图像FFT)时,可以使用什么C#代码(或伪代码)来确定图像是否模糊?

MBo*_*MBo 1

模糊图像的 FFT 结果在高频区域幅度较小。具有低索引(near)的数组元素Result[0][0]表示低频区域。

因此,将结果数组除以某些标准,对两个区域的幅度求和并进行比较。index<M/2例如,使用和选择结果数组的四分之一(大小为 M)indexy<M/2

对于一系列越来越模糊的图像(对于相同的初始图像),您应该看到越来越高的比率Sum(Low)/Sum(High)

结果是方阵 NxN。它具有中心对称性(F(x,y)=F(-x,-y)因为源是纯实数),因此用 处理数组的上半部分就足够了y<N/2

低频分量位于数组的左上角和右上角附近(y 的最小值、x 的最小值和最大值)。因此,对范围内的数组元素的大小求和

for y in range 0..N/2
   for x in range 0..N
      amp = magnitude(y,x)
      if (y<N/4) and ((x<N/4)or (x>=3*N/4))
          low = low + amp
      else                
          high = high + amp
Run Code Online (Sandbox Code Playgroud)

请注意,您的图片显示了混乱的数组片段 - 这是在中心显示零分量的标准做法。