窝牛号

开发者都在使用的OpenCV FFT傅里叶检测上传到服务器上的模糊图片

FFT 快速傅里叶变换

傅里叶变换

快速傅里叶变换(Fast Fourier Transform,FFT)是一种可在 O(nlogn)

时间内完成的离散傅里叶变换(Discrete Fourier transform,DFT)算法。具体什么是傅里叶变换,这里不再讲述,有兴趣的小伙伴们可以自行百度。

在计算机视觉方面,我们经常将FFT视为代表两个域中的图像的图像处理工具:

傅立叶(即频域)域空间域

因此,FFT以实部和虚部表示图像。

通过分析这些值,我们可以执行图像处理例程,例如模糊,边缘检测,阈值化,纹理分析,甚至可以进行模

利用opencv傅里叶变换检测模糊图片import numpy as np import cv2 def detect_blur_fft(image, size=60, thresh=10): (h, w) = image.shape (cX, cY) = (int(w / 2.0), int(h / 2.0)) fft = np.fft.fft2(image) fftShift = np.fft.fftshift(fft) fftShift[cY - size:cY + size, cX - size:cX + size] = 0 fftShift = np.fft.ifftshift(fftShift) recon = np.fft.ifft2(fftShift) magnitude = 20 * np.log(np.abs(recon)) mean = np.mean(magnitude) return (mean, mean <= thresh)

首先我们建立一个利用opencv快速傅里叶变换检测模糊照片的函数,函数接受:

image:我们用于模糊检测的输入图像

size:围绕图像中心点的半径大小,我们将使FFT偏移为零

thresh:阀值,该值将与幅值的平均值进行比较,以确定图像是否被认为是模糊

模糊图片检测

这里,我们使用NumPy的内置算法,计算图片的FFT

然后,我们将结果的零频率分量(DC分量)移到中心,以便于后期数据分析。

通过fftShift[cY - size:cY + size, cX - size:cX + size] = 0行将FFT移位的中心归零(即去除低频)

应用反向移位将直流分量放回top-left

应用逆变换FFT

已经将中心DC值归零后,再次对重构图像进行频谱分析magnitude = 20 * np.log(np.abs(recon))。

计算幅度的平均值mean = np.mean(magnitude)。

返回2元组 :幅度的平均值以及指示输入图像是否模糊的布尔值

代码截图

以上函数便是完整的图片模糊检测的全部代码,中间的FFT变换,若感兴趣的可以好好学习一下高等数学的基础知识,有了此函数,我们传入需要检测的图片,便可以进行图片的检测了。

模糊图片检测

opencv模糊图片检测orig = cv2.imread(&34;) orig = cv2.resize(orig, (600,500)) gray = cv2.cvtColor(orig, cv2.COLOR_BGR2GRAY) (mean, blurry) = detect_blur_fft(gray, size=60,thresh=10) image = np.dstack([gray] * 3) color = (0, 0, 255) if blurry else (0, 255, 0) text = &34; if blurry else &34; text = text.format(mean) cv2.putText(image, text, (10, 25), cv2.FONT_HERSHEY_SIMPLEX, 0.7,color, 2) cv2.imshow(&34;, image) cv2.waitKey(0)

首先我们传入需要进行检测的图片,进行图片的resize,然后cv2.cvtColor把图片转入灰度空间,便于计算,使用先前建立的函数,进行图片的检测,等待返回结果。

代码截图

模糊图片检测

小伙伴们可以根据自己领域内的图片,对检测图片的阈值进行设置来适应不同平台,不同领域的图片模糊检测

当然根据以上的FFT技术,我们也可以进行视频的模糊实时检测,这里小编不再介绍,前期也介绍了很多关于视频检测方面的方法,其实是把视频帧提取出来,每帧图片进行处理,跟图片检测一样的机制。

本站所发布的文字与图片素材为非商业目的改编或整理,版权归原作者所有,如侵权或涉及违法,请联系我们删除

窝牛号 wwww.93ysy.com   沪ICP备2021036305号-1