【光電智造】算法|OpenCV快速傅里葉變換(FFT)用于圖像和視頻流的模糊檢測
今日光電
翻譯自【OpenCV Fast Fourier Transform (FFT) for blur detection in images and video streams】,原文鏈接:
本文僅作學習分享。
(相關資料圖)
原始模糊檢測方法:
模糊檢測,顧名思義,是檢測圖像是否模糊的算法。
模糊檢測可能的應用包括:
圖像質量的自動分級
幫助專業攝影師在100到1000張的照片拍攝過程中自動丟棄模糊/低質量的照片
將OCR應用于實時視頻流,但僅對非模糊幀應用昂貴的OCR計算
這里的關鍵要點是,為在理想條件下捕獲的圖像編寫計算機視覺代碼總是比較容易的。
與其嘗試處理質量非常差的圖像的邊緣情況,不如檢測并丟棄質量差的圖像(比如有明顯模糊的圖像)。
這種模糊檢測程序既可以自動丟棄質量差的圖像,也可以簡單地告訴終端用戶:”嘿,老兄,再試一次,讓我們在這里捕捉一個更好的畫面”。
請記住,計算機視覺應用程序應該是智能的,因此有了“人工智能”這個術語——有時候,“智能”可以只是檢測輸入數據的質量是否太差,而不是試圖弄懂它。
什么是快速傅立葉變換(FFT)?
快速傅里葉變換是計算離散傅里葉變換的一種方便的數學算法。它用于將信號從一個域轉換為另一個域。
首先使用本教程的“下載”部分下載源代碼和示例圖像。一旦你解壓縮文件,你將有一個目錄組織如下:
我們的模糊檢測器實現需要matplotlib和NumPy。我們將使用內建在NumPy中的快速傅里葉變換算法作為我們方法的基礎;
第4行定義detect_blur_fft函數,接受四個參數:
圖片image:我們對模糊檢測輸入圖像
大小size:以圖像中心點為中心的半徑的大小,我們將使FFT偏移為零
閾值thresh:用于確定圖像是否被認為是模糊的,將與震級的平均值(稍后詳細說明)進行比較的一個值
標識符vis:一個布爾值,指示是否使用matplotlib可視化/繪制原始輸入圖像和大小圖像
給定輸入圖像,首先獲取它的尺寸(第7行)并計算中心(x, y)坐標(第8行)。
接下來,我們將使用NumPy的快速傅里葉變換(FFT)算法實現來計算離散傅里葉變換(DFT):
現在我們的detect_blur_fft 輔助函數已經實現,讓我們通過創建一個Python驅動程序腳本來使用它,該腳本從磁盤加載一個輸入圖像,然后對其應用FFT模糊檢測。
第2-6行進行導入,特別的是,我們需要導入我們在上一節中實現的detect_blur_fft函數。
從這里,我們解析四個命令行參數:
--image:用于模糊檢測的輸入圖像的路徑。
--thresh:我們的模糊檢測器計算閾值。
--vis:我們的標志符,指示是否將輸入圖像的幅度值圖像可視化。
--test:為了測試,我們可以逐步模糊輸入圖像,并對每個示例進行基于fft的模糊檢測;此標志指示我們是否將執行此測試。
--image、--thresh和--vis參數分別對應于我們在上一節實現的detect_blur_fft函數的image、thresh和vis參數。
讓我們繼續,加載我們的輸入圖像,執行快速傅里葉變換模糊檢測:
這里你可以看到我在錫安國家公園的地鐵徒步旅行的輸入圖像-圖像被正確地標記為不模糊。
讓我們試試另一張圖片,這是我家的狗,Jemma:
這幅圖像有明顯的模糊,因此被標記為模糊。
在這里,您可以看到我們的圖像很快變得模糊和不可讀,正如輸出所示,我們的OpenCV FFT模糊檢測器正確地將這些圖像標記為模糊。
下面是一個可視化的快速傅里葉變換幅度值,圖像變得越來越模糊:
----與智者為伍為創新賦能----
聯系郵箱:uestcwxd@126.com
QQ:493826566
關鍵詞: