一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenCV快速傅里葉變換(FFT)模糊檢測(cè)

新機(jī)器視覺(jué) ? 來(lái)源:新機(jī)器視覺(jué) ? 2020-09-24 13:00 ? 次閱讀

在本教程中,您將學(xué)習(xí)如何使用OpenCV和快速傅里葉變換(FFT)在圖像和實(shí)時(shí)視流中執(zhí)行模糊檢測(cè)。 今天的教程是我上一篇關(guān)于OpenCV模糊檢測(cè)的博客文章的擴(kuò)展

(https://www.pyimagesearch.com/2015/09/07/blur-detection-with-opencv/)。

原始模糊檢測(cè)方法:

依賴(lài)于計(jì)算圖像Laplacian算子的方差

可以?xún)H用一行代碼實(shí)現(xiàn)

使用起來(lái)非常簡(jiǎn)單

缺點(diǎn)是,Laplacian方法需要大量手動(dòng)調(diào)整用于定義圖像是否模糊的”閾值“。如果你能控制你的光線(xiàn)條件,環(huán)境和圖像捕捉過(guò)程,這個(gè)方法工作得很好,但如果不是,那你很可能得到雜亂不堪的效果。 我們今天要講的方法依賴(lài)于計(jì)算圖像的快速傅里葉變換。它仍然需要一些手動(dòng)調(diào)整,但正如我們將發(fā)現(xiàn)的,F(xiàn)FT模糊檢測(cè)器比Laplacian方差更加可靠與穩(wěn)定。 在本教程結(jié)束時(shí),你將擁有一個(gè)可以應(yīng)用于圖像和視頻流,且功能齊全的FFT模糊檢測(cè)器。 OpenCV快速傅里葉變換(FFT)模糊檢測(cè) 在本教程的第一部分,我們將簡(jiǎn)要討論:

什么是模糊檢測(cè)

為什么我們想檢測(cè)圖像/視頻流中的模糊

快速傅里葉變換如何讓我們檢測(cè)模糊

什么是模糊檢測(cè),什么時(shí)候我們需要檢測(cè)模糊?

圖1:如何使用OpenCV和快速傅里葉變換(FFT)算法自動(dòng)檢測(cè)照片是否模糊?(圖片來(lái)源:https://www.cs.unm.edu/~brayer/vision/fourier.html)

模糊檢測(cè),顧名思義,是檢測(cè)圖像是否模糊的算法。

模糊檢測(cè)可能的應(yīng)用包括:

圖像質(zhì)量的自動(dòng)分級(jí)

幫助專(zhuān)業(yè)攝影師在100到1000張的照片拍攝過(guò)程中自動(dòng)丟棄模糊/低質(zhì)量的照片

將OCR應(yīng)用于實(shí)時(shí)視頻流,但僅對(duì)非模糊幀應(yīng)用昂貴的OCR計(jì)算

這里的關(guān)鍵要點(diǎn)是,為在理想條件下捕獲的圖像編寫(xiě)計(jì)算機(jī)視覺(jué)代碼總是比較容易的。

與其嘗試處理質(zhì)量非常差的圖像的邊緣情況,不如檢測(cè)并丟棄質(zhì)量差的圖像(比如有明顯模糊的圖像)。

這種模糊檢測(cè)程序既可以自動(dòng)丟棄質(zhì)量差的圖像,也可以簡(jiǎn)單地告訴終端用戶(hù):”嘿,老兄,再試一次,讓我們?cè)谶@里捕捉一個(gè)更好的畫(huà)面”。

請(qǐng)記住,計(jì)算機(jī)視覺(jué)應(yīng)用程序應(yīng)該是智能的,因此有了“人工智能”這個(gè)術(shù)語(yǔ)——有時(shí)候,“智能”可以只是檢測(cè)輸入數(shù)據(jù)的質(zhì)量是否太差,而不是試圖弄懂它。

什么是快速傅立葉變換(FFT)?

圖2:在本教程中,我們將使用OpenCV和NumPy的組合在圖像和視流中進(jìn)行基于快速傅立葉變換(FFT)的模糊檢測(cè)。

快速傅里葉變換是計(jì)算離散傅里葉變換的一種方便的數(shù)學(xué)算法。它用于將信號(hào)從一個(gè)域轉(zhuǎn)換為另一個(gè)域。

FFT在許多學(xué)科中都很有用,包括音樂(lè)、數(shù)學(xué)、科學(xué)和工程。例如,電氣工程師,特別是那些與無(wú)線(xiàn)、電源音頻信號(hào)打交道的工程師,需要FFT計(jì)算來(lái)將時(shí)間序列信號(hào)轉(zhuǎn)換到頻域,因?yàn)橛行┯?jì)算在頻域更容易進(jìn)行。相反,使用FFT可以將頻域信號(hào)轉(zhuǎn)換回時(shí)域。 在計(jì)算機(jī)視覺(jué)方面,我們通常認(rèn)為FFT是一種圖像處理工具,它可以將圖片在兩個(gè)圖像域內(nèi)轉(zhuǎn)換:

傅里葉(即頻率)域

空間域

此外,F(xiàn)FT同時(shí)用實(shí)分量和虛分量來(lái)表示圖像。 通過(guò)分析這些值,我們可以執(zhí)行圖像處理程序,如模糊,邊緣檢測(cè),閾值,紋理分析,以及模糊檢測(cè)。 回顧快速傅里葉變換的數(shù)學(xué)細(xì)節(jié)超出了這篇博客文章的范圍,所以如果你有興趣學(xué)習(xí)更多關(guān)于它的知識(shí),我建議你閱讀這篇關(guān)于FFT及其與圖像處理的關(guān)系的文章。

https://homepages.inf.ed.ac.uk/rbf/HIPR2/fourier.htm

對(duì)于有學(xué)術(shù)傾向的讀者,可以看看Aaron Bobick在佐治亞理工學(xué)院計(jì)算機(jī)視覺(jué)課程上的精彩幻燈片。

https://www.cc.gatech.edu/~afb/classes/CS4495-Fall2014/slides/CS4495-Frequency.pdf

最后,維基百科關(guān)于傅里葉變換的頁(yè)面更詳細(xì)地介紹了數(shù)學(xué),包括它在非圖像處理任務(wù)中的應(yīng)用。 項(xiàng)目結(jié)構(gòu)

首先使用本教程的“下載”部分下載源代碼和示例圖像。一旦你解壓縮文件,你將有一個(gè)目錄組織如下:

$ tree --dirsfirst.├── images│ ├── adrian_01.png│ ├── adrian_02.png│ ├── jemma.png│ └── resume.png├── pyimagesearch│ ├── __init__.py│ └── blur_detector.py├── blur_detector_image.py└── blur_detector_video.py2 directories, 8 files我們基于FFT的模糊檢測(cè)算法位于blur_detector.py文件中的pyimagesearch模塊中。內(nèi)部實(shí)現(xiàn)了一個(gè)函數(shù)detect_blur_fft。 我們?cè)趦蓚€(gè)Python驅(qū)動(dòng)程序腳本中使用detect_blur_fft方法:

blur_detector_image:對(duì)靜態(tài)圖像進(jìn)行模糊檢測(cè)。我在images/目錄中為我們提供了一些測(cè)試圖像,您也應(yīng)該在自己的圖像(模糊的和不模糊的)上嘗試這種算法。

blur_detector_video。在視頻流中實(shí)現(xiàn)實(shí)時(shí)模糊檢測(cè)。

使用OpenCV實(shí)現(xiàn)我們的FFT模糊檢測(cè)器 現(xiàn)在我們準(zhǔn)備用OpenCV實(shí)現(xiàn)我們的快速傅里葉變換模糊檢測(cè)器。 我們將要介紹的方法是基于Liu等人在2008年CVPR出版物《圖像部分模糊檢測(cè)和分類(lèi)》中實(shí)現(xiàn)的。

http://www.cse.cuhk.edu.hk/leojia/all_final_papers/blur_detect_cvpr08.pdf

在我們的目錄結(jié)構(gòu)中打開(kāi)blur_detector.py文件,插入以下代碼:

# import the necessary packagesimport matplotlib.pyplot as pltimport numpy as npdef detect_blur_fft(image, size=60, thresh=10, vis=False): # grab the dimensions of the image and use the dimensions to # derive the center (x, y)-coordinates (h, w) = image.shape (cX, cY) = (int(w / 2.0), int(h / 2.0))

我們的模糊檢測(cè)器實(shí)現(xiàn)需要matplotlib和NumPy。我們將使用內(nèi)建在NumPy中的快速傅里葉變換算法作為我們方法的基礎(chǔ);

第4行定義detect_blur_fft函數(shù),接受四個(gè)參數(shù):

圖片image:我們對(duì)模糊檢測(cè)輸入圖像

大小size:以圖像中心點(diǎn)為中心的半徑的大小,我們將使FFT偏移為零

閾值thresh:用于確定圖像是否被認(rèn)為是模糊的,將與震級(jí)的平均值(稍后詳細(xì)說(shuō)明)進(jìn)行比較的一個(gè)值

標(biāo)識(shí)符vis:一個(gè)布爾值,指示是否使用matplotlib可視化/繪制原始輸入圖像和大小圖像

給定輸入圖像,首先獲取它的尺寸(第7行)并計(jì)算中心(x, y)坐標(biāo)(第8行)。

接下來(lái),我們將使用NumPy的快速傅里葉變換(FFT)算法實(shí)現(xiàn)來(lái)計(jì)算離散傅里葉變換(DFT):

# compute the FFT to find the frequency transform, then shift # the zero frequency component (i.e., DC component located at # the top-left corner) to the center where it will be more # easy to analyze fft = np.fft.fft2(image) fftShift = np.fft.fftshift(fft)在這里,我們使用NumPy的內(nèi)置算法計(jì)算FFT(第5行)。 然后我們將結(jié)果的零頻率分量(直流分量)移到中心以便于分析(第6行)。 現(xiàn)在我們已經(jīng)有了圖像的FFT,如果設(shè)置了vis標(biāo)志,讓我們可視化一下結(jié)果:

# check to see if we are visualizing our output if vis: # compute the magnitude spectrum of the transform magnitude = 20 * np.log(np.abs(fftShift)) # display the original input image (fig, ax) = plt.subplots(1, 2, ) ax[0].imshow(image, cmap="gray") ax[0].set_title("Input") ax[0].set_xticks([]) ax[0].set_yticks([]) # display the magnitude image ax[1].imshow(magnitude, cmap="gray") ax[1].set_title("Magnitude Spectrum") ax[1].set_xticks([]) ax[1].set_yticks([]) # show our plots plt.show()出于調(diào)試和好奇的目的,您可能希望通過(guò)設(shè)置vis=True來(lái)繪制輸入圖像的FFT幅度譜。 如果你選擇這樣做,首先我們計(jì)算變換的振幅譜(第4行)。 然后,我們將原始輸入圖像繪制在幅度譜圖像旁邊(第6-16行),并顯示結(jié)果(第19行)。 現(xiàn)在我們有了可視化振幅譜的方法,讓我們來(lái)確定輸入圖像是否模糊:

# zero-out the center of the FFT shift (i.e., remove low # frequencies), apply the inverse shift such that the DC # component once again becomes the top-left, and then apply # the inverse FFT fftShift[cY - size:cY + size, cX - size:cX + size] = 0 fftShift = np.fft.ifftshift(fftShift) recon = np.fft.ifft2(fftShift)在這里,我們:

設(shè)置我們的FFT移動(dòng)為0(即,去除低頻率)第5行

應(yīng)用反向位移將DC組件放回左上角(第6行)

應(yīng)用逆FFT(第7行)

到此,我們還有三個(gè)步驟來(lái)確定我們的圖像是否模糊:

# compute the magnitude spectrum of the reconstructed image, # then compute the mean of the magnitude values magnitude = 20 * np.log(np.abs(recon)) mean = np.mean(magnitude) # the image will be considered "blurry" if the mean value of the # magnitudes is less than the threshold value return (mean, mean <= thresh其余步驟包括:

在我們已經(jīng)將中心DC值歸零之后,再次計(jì)算重建圖像的幅度值(第3行)。

計(jì)算幅度值的平均值(第4行)。

返回一個(gè)2元組的平均值以及一個(gè)指示輸入圖像是否模糊的布爾值(第8行)。查看代碼,我們可以看到,通過(guò)比較平均值和閾值,我們已經(jīng)確定了模糊布爾值(判斷圖像是否模糊)。

我們實(shí)現(xiàn)了一個(gè)基于fft的模糊檢測(cè)算法。但還沒(méi)有完成。在下一節(jié)中,我們將對(duì)靜態(tài)圖像應(yīng)用我們的算法,以確保它按照我們的期望執(zhí)行。

用FFT檢測(cè)圖像中的模糊

現(xiàn)在我們的detect_blur_fft 輔助函數(shù)已經(jīng)實(shí)現(xiàn),讓我們通過(guò)創(chuàng)建一個(gè)Python驅(qū)動(dòng)程序腳本來(lái)使用它,該腳本從磁盤(pán)加載一個(gè)輸入圖像,然后對(duì)其應(yīng)用FFT模糊檢測(cè)。

打開(kāi)一個(gè)新文件,命名為detect_blur_image.py,并插入以下代碼:

# import the necessary packagesfrom pyimagesearch.blur_detector import detect_blur_fftimport numpy as npimport argparseimport imutilsimport cv2# construct the argument parser and parse the argumentsap = argparse.ArgumentParser()ap.add_argument("-i", "--image", type=str, required=True, help="path input image that we'll detect blur in")ap.add_argument("-t", "--thresh", type=int, default=20, help="threshold for our blur detector to fire")ap.add_argument("-v", "--vis", type=int, default=-1, help="whether or not we are visualizing intermediary steps")ap.add_argument("-d", "--test", type=int, default=-1, help="whether or not we should progressively blur the image")args = vars(ap.parse_args())

第2-6行進(jìn)行導(dǎo)入,特別的是,我們需要導(dǎo)入我們?cè)谏弦还?jié)中實(shí)現(xiàn)的detect_blur_fft函數(shù)。

從這里,我們解析四個(gè)命令行參數(shù):

--image:用于模糊檢測(cè)的輸入圖像的路徑。

--thresh:我們的模糊檢測(cè)器計(jì)算閾值。

--vis:我們的標(biāo)志符,指示是否將輸入圖像的幅度值圖像可視化。

--test:為了測(cè)試,我們可以逐步模糊輸入圖像,并對(duì)每個(gè)示例進(jìn)行基于fft的模糊檢測(cè);此標(biāo)志指示我們是否將執(zhí)行此測(cè)試。

--image、--thresh和--vis參數(shù)分別對(duì)應(yīng)于我們?cè)谏弦还?jié)實(shí)現(xiàn)的detect_blur_fft函數(shù)的image、thresh和vis參數(shù)。

讓我們繼續(xù),加載我們的輸入圖像,執(zhí)行快速傅里葉變換模糊檢測(cè):

# load the input image from disk, resize it, and convert it to# grayscaleorig = cv2.imread(args["image"])orig = imutils.resize(orig, width=500)gray = cv2.cvtColor(orig, cv2.COLOR_BGR2GRAY)# apply our blur detector using the FFT(mean, blurry) = detect_blur_fft(gray, size=60, thresh=args["thresh"], vis=args["vis"] > 0)進(jìn)行FFT模糊檢測(cè),我們:

加載輸入圖像--image,并將其轉(zhuǎn)換為灰度(第3-5行)

使用detect_blur_fft函數(shù)應(yīng)用我們的FFT模糊檢測(cè)器(第7和8行)

接下來(lái),我們將注釋并顯示我們的圖像:

# draw on the image, indicating whether or not it is blurryimage = np.dstack([gray] * 3)color = (0, 0, 255) if blurry else (0, 255, 0)text = "Blurry ({:.4f})" if blurry else "Not Blurry ({:.4f})"text = text.format(mean)cv2.putText(image, text, (10, 25), cv2.FONT_HERSHEY_SIMPLEX, 0.7, color, 2)print("[INFO] {}".format(text))# show the output imagecv2.imshow("Output", image)cv2.waitKey(0)在這里,我們:

向我們的單通道灰度圖像添加兩個(gè)通道,將結(jié)果存儲(chǔ)在圖像中(第2行)

通過(guò)第32行將顏色設(shè)置為紅色(如果模糊)和綠色(如果不模糊)

在圖像的左上角繪制模糊的文本指示和平均值(第4-7行),并在終端中打印相同的信息(第37行)

顯示輸出圖像,直到按下一個(gè)鍵為止(第11和12行)

至此,我們已經(jīng)完成了確定輸入圖像是否模糊的目標(biāo)。 我們可以就此打住。但是為了更嚴(yán)格地測(cè)試我們的算法,讓我們實(shí)現(xiàn)一個(gè)健壯的方法來(lái)測(cè)試我們的圖像在不同層次上的模糊:

# check to see if are going to test our FFT blurriness detector using# various sizes of a Gaussian kernelif args["test"] > 0: # loop over various blur radii for radius in range(1, 30, 2): # clone the original grayscale image image = gray.copy() # check to see if the kernel radius is greater than zero if radius > 0: # blur the input image by the supplied radius using a # Gaussian kernel image = cv2.GaussianBlur(image, (radius, radius), 0) # apply our blur detector using the FFT (mean, blurry) = detect_blur_fft(image, size=60, thresh=args["thresh"], vis=args["vis"] > 0) # draw on the image, indicating whether or not it is # blurry image = np.dstack([image] * 3) color = (0, 0, 255) if blurry else (0, 255, 0) text = "Blurry ({:.4f})" if blurry else "Not Blurry ({:.4f})" text = text.format(mean) cv2.putText(image, text, (10, 25), cv2.FONT_HERSHEY_SIMPLEX, 0.7, color, 2) print("[INFO] Kernel: {}, Result: {}".format(radius, text)) # show the image cv2.imshow("Test Image", image) cv2.waitKey(0)當(dāng)設(shè)置了--test標(biāo)志時(shí),我們將進(jìn)入從第3行開(kāi)始的條件塊。第3-31行代碼完成了以下工作:

在逐漸增加的半徑范圍內(nèi)對(duì)我們的灰度圖像應(yīng)用高斯模糊

對(duì)每個(gè)人為模糊的圖像進(jìn)行快速的基于傅里葉變換的模糊檢測(cè)

注釋并顯示結(jié)果

為了完成我們的測(cè)試特性,第5行開(kāi)始在[0,30]范圍內(nèi)的所有奇數(shù)半徑上進(jìn)行循環(huán)。從這里開(kāi)始,第13行應(yīng)用OpenCV的GaussianBlur方法有意地在我們的圖像中引入模糊。 其他的都是一樣的,包括模糊檢測(cè)算法和注釋步驟。您可以通過(guò)在屏幕上按一個(gè)鍵來(lái)循環(huán)測(cè)試結(jié)果圖像,直到模糊半徑在該范圍內(nèi)耗盡。 當(dāng)然,我們測(cè)試?yán)痰哪康氖亲屛覀兡軌蛴行У馗惺芎驼{(diào)整模糊閾值參數(shù)(—thresh)。

FFT模糊檢測(cè)在圖像結(jié)果 現(xiàn)在我們準(zhǔn)備使用OpenCV和快速傅里葉變換來(lái)檢測(cè)圖像中的模糊。 首先,請(qǐng)確保使用本教程的“下載”部分下載源代碼和示例圖像。 然后打開(kāi)終端,執(zhí)行以下命令:

$ python blur_detector_image.py --image images/adrian_01.png[INFO] Not Blurry (42.4630)

圖3:結(jié)合快速傅里葉變換(FFT)算法,使用Python和OpenCV來(lái)確定照片是否模糊

這里你可以看到我在錫安國(guó)家公園的地鐵徒步旅行的輸入圖像-圖像被正確地標(biāo)記為不模糊。

讓我們?cè)囋嚵硪粡垐D片,這是我家的狗,Jemma:

$ python blur_detector_image.py --image images/jemma.png[INFO] Blurry (12.4738)

圖4:基于Python、OpenCV和NumPy的快速傅里葉變換(FFT)模糊檢測(cè)算法已經(jīng)自動(dòng)判定Janie的這張圖像模糊。

這幅圖像有明顯的模糊,因此被標(biāo)記為模糊。

為了了解當(dāng)圖像變得越來(lái)越模糊時(shí),F(xiàn)FT的平均幅度值是如何變化的,讓我們提供——test命令行參數(shù):

$ python blur_detector_image.py --image images/adrian_02.png --test 1[INFO] Not Blurry (32.0934)[INFO] Kernel: 1, Result: Not Blurry (32.0934)[INFO] Kernel: 3, Result: Not Blurry (25.1770)[INFO] Kernel: 5, Result: Not Blurry (20.5668)[INFO] Kernel: 7, Result: Blurry (13.4830)[INFO] Kernel: 9, Result: Blurry (7.8893)[INFO] Kernel: 11, Result: Blurry (0.6506)[INFO] Kernel: 13, Result: Blurry (-5.3609)[INFO] Kernel: 15, Result: Blurry (-11.4612)[INFO] Kernel: 17, Result: Blurry (-17.0109)[INFO] Kernel: 19, Result: Blurry (-19.6464)[INFO] Kernel: 21, Result: Blurry (-20.4758)[INFO] Kernel: 23, Result: Blurry (-20.7365)[INFO] Kernel: 25, Result: Blurry (-20.9362)[INFO] Kernel: 27, Result: Blurry (-21.1911)[INFO] Kernel: 29, Result: Blurry (-21.3853)

圖5:使用Python模糊檢測(cè)器腳本的——測(cè)試?yán)蹋覀儜?yīng)用了一系列有意的模糊以及快速傅里葉變換(FFT)方法來(lái)確定圖像是否模糊。這個(gè)測(cè)試?yán)谭浅S杏茫驗(yàn)樗试S您調(diào)優(yōu)模糊閾值參數(shù)。

在這里,你可以看到,當(dāng)我們的圖像變得越來(lái)越模糊,F(xiàn)FT的平均幅度值下降。 我們的FFT模糊檢測(cè)方法也適用于非自然場(chǎng)景圖像。 例如,假設(shè)我們想要構(gòu)建一個(gè)自動(dòng)文檔掃描器應(yīng)用程序——這樣的計(jì)算機(jī)視覺(jué)項(xiàng)目應(yīng)該會(huì)自動(dòng)拒絕模糊圖像。 然而,文檔圖像與自然場(chǎng)景圖像有很大的不同,從本質(zhì)上來(lái)說(shuō),文檔圖像對(duì)模糊更加敏感。 任何類(lèi)型的模糊都會(huì)嚴(yán)重影響OCR的精度。 因此,我們應(yīng)該增加我們的——thresh值(我還將使用——vis參數(shù),以便我們可以可視化FFT幅度值的變化):

$ python blur_detector_image.py --image images/resume.png --thresh 27 --test 1 --vis 1[INFO] Not Blurry (34.6735)[INFO] Kernel: 1, Result: Not Blurry (34.6735)[INFO] Kernel: 3, Result: Not Blurry (29.2539)[INFO] Kernel: 5, Result: Blurry (26.2893)[INFO] Kernel: 7, Result: Blurry (21.7390)[INFO] Kernel: 9, Result: Blurry (18.3632)[INFO] Kernel: 11, Result: Blurry (12.7235)[INFO] Kernel: 13, Result: Blurry (9.1489)[INFO] Kernel: 15, Result: Blurry (2.3377)[INFO] Kernel: 17, Result: Blurry (-2.6372)[INFO] Kernel: 19, Result: Blurry (-9.1908)[INFO] Kernel: 21, Result: Blurry (-15.9808)[INFO] Kernel: 23, Result: Blurry (-20.6240)[INFO] Kernel: 25, Result: Blurry (-29.7478)[INFO] Kernel: 27, Result: Blurry (-29.0728)[INFO] Kernel: 29, Result: Blurry (-37.7561)

圖6:OpenCV快速傅里葉變換(FFT)用于圖像和視視頻中的模糊檢測(cè),可以判斷簡(jiǎn)歷等文檔是否模糊。

在這里,您可以看到我們的圖像很快變得模糊和不可讀,正如輸出所示,我們的OpenCV FFT模糊檢測(cè)器正確地將這些圖像標(biāo)記為模糊。

下面是一個(gè)可視化的快速傅里葉變換幅度值,圖像變得越來(lái)越模糊:

圖7:當(dāng)圖像變得越來(lái)越模糊時(shí),我們可以看到幅度譜可視化的變化。本教程使用OpenCV和NumPy在圖像和視流中執(zhí)行快速傅里葉變換(FFT)模糊檢測(cè)。

利用OpenCV和FFT檢測(cè)視頻中的模糊 到目前為止,我們已經(jīng)對(duì)圖像應(yīng)用了快速傅里葉變換模糊檢測(cè)器。 但是有可能將FFT模糊檢測(cè)應(yīng)用到視頻流嗎? 整個(gè)過(guò)程也能實(shí)時(shí)完成嗎? 打開(kāi)一個(gè)新文件,命名為blur_detector_video.py,并插入以下代碼:

# import the necessary packagesfrom imutils.video import VideoStreamfrom pyimagesearch.blur_detector import detect_blur_fftimport argparseimport imutilsimport timeimport cv2# construct the argument parser and parse the argumentsap = argparse.ArgumentParser()ap.add_argument("-t", "--thresh", type=int, default=10, help="threshold for our blur detector to fire")args = vars(ap.parse_args())我們從導(dǎo)入開(kāi)始,特別是我們的VideoStream類(lèi)和detect_blur_fft函數(shù)。 對(duì)于這個(gè)Python腳本,我們只有一個(gè)命令行參數(shù):FFT模糊檢測(cè)的閾值(——thresh)。 從這里,我們準(zhǔn)備初始化我們的視頻流,并開(kāi)始循環(huán)從我們的攝像頭的幀:

# initialize the video stream and allow the camera sensor to warm upprint("[INFO] starting video stream...")vs = VideoStream(src=0).start()time.sleep(2.0)# loop over the frames from the video streamwhile True: # grab the frame from the threaded video stream and resize it # to have a maximum width of 400 pixels frame = vs.read() frame = imutils.resize(frame, width=500) # convert the frame to grayscale and detect blur in it gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) (mean, blurry) = detect_blur_fft(gray, size=60, thresh=args["thresh"], vis=False)第3行和第4行初始化了我們的攝像頭圖像流,并允許相機(jī)有時(shí)間預(yù)熱。 從這里開(kāi)始,我們?cè)诘?行開(kāi)始幀處理循環(huán)。在內(nèi)部,我們抓取一幀并將其轉(zhuǎn)換為灰度(第10-14行),就像在我們的單一圖像模糊檢測(cè)腳本。 然后,第15和16行應(yīng)用我們的快速傅里葉變換模糊檢測(cè)算法,同時(shí)傳遞我們的灰色框架和——thresh命令行參數(shù)。我們不會(huì)把幅度譜的表示形象化,所以vis=False。 接下來(lái),我們將處理這個(gè)特定幀的結(jié)果:

# draw on the frame, indicating whether or not it is blurry color = (0, 0, 255) if blurry else (0, 255, 0) text = "Blurry ({:.4f})" if blurry else "Not Blurry ({:.4f})" text = text.format(mean) cv2.putText(frame, text, (10, 25), cv2.FONT_HERSHEY_SIMPLEX, 0.7, color, 2) # show the output frame cv2.imshow("Frame", frame) key = cv2.waitKey(1) & 0xFF # if the `q` key was pressed, break from the loop if key == ord("q"): break# do a bit of cleanupcv2.destroyAllWindows()vs.stop()最后一個(gè)代碼塊此時(shí)看起來(lái)應(yīng)該非常熟悉,因?yàn)檫@是我們第三次看到這些代碼行了。我們?cè)谶@里:

注釋模糊(紅色文本)或不模糊(綠色文本)以及平均值(第2-6行)

顯示結(jié)果(第9行)

如果按下q鍵就退出(第10-14行),并執(zhí)行家務(wù)清理(第17和18行)

快速傅里葉變換視頻模糊檢測(cè)結(jié)果 我們現(xiàn)在準(zhǔn)備看看我們的OpenCV FFT模糊檢測(cè)器是否可以應(yīng)用于實(shí)時(shí)視頻流。 請(qǐng)確保使用本教程的“下載”部分下載源代碼。 然后打開(kāi)終端,執(zhí)行以下命令:

$ python blur_detector_video.py[INFO] starting video stream...

當(dāng)我移動(dòng)我的筆記本電腦,運(yùn)動(dòng)模糊被引入幀。 如果我們要實(shí)現(xiàn)一個(gè)計(jì)算機(jī)視覺(jué)系統(tǒng)來(lái)自動(dòng)提取關(guān)鍵、重要的幀,或者創(chuàng)建一個(gè)自動(dòng)的視頻OCR系統(tǒng),我們會(huì)想要丟棄這些模糊的幀——使用我們的OpenCV FFT模糊檢測(cè)器,我們可以做到這一點(diǎn)!

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 檢測(cè)器
    +關(guān)注

    關(guān)注

    1

    文章

    882

    瀏覽量

    48300
  • OpenCV
    +關(guān)注

    關(guān)注

    31

    文章

    642

    瀏覽量

    42274
  • 傅里葉變換
    +關(guān)注

    關(guān)注

    6

    文章

    442

    瀏覽量

    42954

原文標(biāo)題:OpenCV快速傅里葉變換(FFT)用于圖像和視頻流的模糊檢測(cè)

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    進(jìn)群免費(fèi)領(lǐng)FPGA學(xué)習(xí)資料!數(shù)字信號(hào)處理、傅里葉變換與FPGA開(kāi)發(fā)等

    設(shè)計(jì)及其應(yīng)用;參數(shù)化建模;隨機(jī)信號(hào)分析。 05、信號(hào)處理中的傅里葉變換 共七章,內(nèi)容包括:信號(hào)與譜,離散傅里葉變換,離散傅里葉變換的數(shù)值計(jì)算,快速卷積,信號(hào)處理中的
    發(fā)表于 04-07 16:41

    頻域示波器的技術(shù)原理和應(yīng)用場(chǎng)景

    頻域示波器,其主要技術(shù)原理基于信號(hào)的傅里葉變換理論,通過(guò)快速傅里葉變換FFT)算法將時(shí)域信號(hào)轉(zhuǎn)換為頻域信號(hào),從而進(jìn)行頻譜分析。以下是對(duì)頻域示波器的技術(shù)原理和應(yīng)用場(chǎng)景的詳細(xì)分析:一、技
    發(fā)表于 03-11 14:37

    DFT與離散時(shí)間傅里葉變換的關(guān)系 DFT在無(wú)線(xiàn)通信中的應(yīng)用

    DFT與離散時(shí)間傅里葉變換(DTFT)的關(guān)系 DFT(離散傅里葉變換)與DTFT(離散時(shí)間傅里葉變換)都是信號(hào)處理中的重要工具,用于將信號(hào)從時(shí)域轉(zhuǎn)換到頻域。它們之間存在一定的聯(lián)系和區(qū)別: 定義與對(duì)象
    的頭像 發(fā)表于 12-20 09:21 ?1302次閱讀

    傅立葉變換在機(jī)器學(xué)習(xí)中的應(yīng)用 常見(jiàn)傅立葉變換的誤區(qū)解析

    存在的各種頻率,從而實(shí)現(xiàn)語(yǔ)音識(shí)別、音樂(lè)分類(lèi)和降噪等任務(wù)。 圖像分析:通過(guò)傅里葉變換,可以從圖像中提取紋理和圖案信息,檢測(cè)邊緣、形狀和其他視覺(jué)特征,這對(duì)于圖像識(shí)別、對(duì)象檢測(cè)和圖像壓縮等任務(wù)至關(guān)重要。 時(shí)間序列分析 :
    的頭像 發(fā)表于 12-06 17:06 ?787次閱讀

    常見(jiàn)傅里葉變換錯(cuò)誤及解決方法

    傅里葉變換是一種數(shù)學(xué)工具,用于將信號(hào)從時(shí)域轉(zhuǎn)換到頻域,以便分析其頻率成分。在使用傅里葉變換時(shí),可能會(huì)遇到一些常見(jiàn)的錯(cuò)誤。 1. 采樣定理錯(cuò)誤 錯(cuò)誤描述: 在進(jìn)行傅里葉變換之前,沒(méi)有正確地采樣信號(hào)
    的頭像 發(fā)表于 11-14 09:42 ?1851次閱讀

    傅里葉變換的基本性質(zhì)和定理

    傅里葉變換是信號(hào)處理和分析中的一項(xiàng)基本工具,它能夠?qū)⒁粋€(gè)信號(hào)從時(shí)間域(或空間域)轉(zhuǎn)換到頻率域。以下是傅里葉變換的基本性質(zhì)和定理: 一、基本性質(zhì) 線(xiàn)性性質(zhì) : 傅里葉變換是線(xiàn)性的,即對(duì)于信號(hào)的線(xiàn)性組合
    的頭像 發(fā)表于 11-14 09:39 ?2393次閱讀

    經(jīng)典傅里葉變換快速傅里葉變換的區(qū)別

    經(jīng)典傅里葉變換快速傅里葉變換FFT)在多個(gè)方面存在顯著的區(qū)別,以下是對(duì)這兩者的比較: 一、定義與基本原理 經(jīng)典傅里葉變換 : 是一種將滿(mǎn)
    的頭像 發(fā)表于 11-14 09:37 ?972次閱讀

    如何實(shí)現(xiàn)離散傅里葉變換

    離散傅里葉變換(DFT)是將離散時(shí)序信號(hào)從時(shí)間域變換到頻率域的數(shù)學(xué)工具,其實(shí)現(xiàn)方法有多種,以下介紹幾種常見(jiàn)的實(shí)現(xiàn)方案: 一、直接計(jì)算法 直接依據(jù)離散傅里葉變換公式進(jìn)行計(jì)算,這種方法最簡(jiǎn)單直接,但時(shí)間
    的頭像 發(fā)表于 11-14 09:35 ?987次閱讀

    傅里葉變換與卷積定理的關(guān)系

    傅里葉變換與卷積定理之間存在著密切的關(guān)系,這種關(guān)系在信號(hào)處理、圖像處理等領(lǐng)域中具有重要的應(yīng)用價(jià)值。 一、傅里葉變換與卷積的基本概念 傅里葉變換 : 是一種將時(shí)間域(或空間域)信號(hào)轉(zhuǎn)換為頻率域信號(hào)
    的頭像 發(fā)表于 11-14 09:33 ?1549次閱讀

    傅里葉變換與圖像處理技術(shù)的區(qū)別

    在數(shù)字信號(hào)處理和圖像分析領(lǐng)域,傅里葉變換和圖像處理技術(shù)是兩個(gè)核心概念。盡管它們?cè)趯?shí)際應(yīng)用中常常交織在一起,但它們?cè)诒举|(zhì)上有著明顯的區(qū)別。 傅里葉變換的基本原理 傅里葉變換是一種將信號(hào)從時(shí)域(或空間域
    的頭像 發(fā)表于 11-14 09:30 ?688次閱讀

    傅里葉變換在信號(hào)處理中的應(yīng)用

    在現(xiàn)代通信和信號(hào)處理領(lǐng)域,傅里葉變換(FT)扮演著核心角色。它不僅幫助我們分析信號(hào)的頻率成分,還能用于濾波、壓縮和信號(hào)恢復(fù)等多種任務(wù)。 傅里葉變換的基本原理 傅里葉變換是一種將信號(hào)從時(shí)域轉(zhuǎn)換到頻域
    的頭像 發(fā)表于 11-14 09:29 ?3949次閱讀

    傅里葉變換的數(shù)學(xué)原理

    傅里葉變換的數(shù)學(xué)原理主要基于一種將函數(shù)分解為正弦和余弦函數(shù)(或復(fù)指數(shù)函數(shù))的線(xiàn)性組合的思想。以下是對(duì)傅里葉變換數(shù)學(xué)原理的介紹: 一、基本原理 傅里葉級(jí)數(shù) :對(duì)于周期性連續(xù)信號(hào),可以將其表示為傅里葉
    的頭像 發(fā)表于 11-14 09:27 ?1398次閱讀

    在TMS320C62x上實(shí)現(xiàn)的擴(kuò)展精度基數(shù)-4快速傅里葉變換

    電子發(fā)燒友網(wǎng)站提供《在TMS320C62x上實(shí)現(xiàn)的擴(kuò)展精度基數(shù)-4快速傅里葉變換.pdf》資料免費(fèi)下載
    發(fā)表于 10-28 10:03 ?0次下載
    在TMS320C62x上實(shí)現(xiàn)的擴(kuò)展精度基數(shù)-4<b class='flag-5'>快速</b><b class='flag-5'>傅里葉變換</b>

    關(guān)于動(dòng)力學(xué)方程能否用matlab進(jìn)行傅里葉變換的問(wèn)題。

    有沒(méi)有大神能講一下動(dòng)力學(xué)方程能不能用matlab進(jìn)行傅里葉變換???
    發(fā)表于 10-11 09:11

    傅里葉變換紅外光譜儀技術(shù)在光伏材料性能表征中的應(yīng)用與優(yōu)化

    傅里葉變換紅外光譜儀在光伏領(lǐng)域應(yīng)用廣泛。美能FTIR4000傅里葉紅外光譜儀利用邁克爾遜干涉儀技術(shù),將光源轉(zhuǎn)化為干涉光并照射樣品,通過(guò)傅里葉變換獲得光譜圖。該儀器配備高靈敏度DLATGS檢測(cè)器和多層
    的頭像 發(fā)表于 06-08 08:33 ?902次閱讀
    <b class='flag-5'>傅里葉變換</b>紅外光譜儀技術(shù)在光伏材料性能表征中的應(yīng)用與優(yōu)化