1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        使用OpenCV進(jìn)行模糊檢測(cè)(拉普拉斯算子)

        共 5474字,需瀏覽 11分鐘

         ·

        2021-11-09 09:52

        點(diǎn)擊下方卡片,關(guān)注“新機(jī)器視覺(jué)”公眾號(hào)

        視覺(jué)/圖像重磅干貨,第一時(shí)間送達(dá)




        本文翻譯自光頭哥哥的博客:

        【Blur detection with OpenCV】。

        本文僅作學(xué)習(xí)分享,原文鏈接:

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

        這只超可愛(ài)、超活躍家養(yǎng)小獵犬可能是有史以來(lái)拍照次數(shù)最多的狗。從8周大我們得到它的時(shí)候,到現(xiàn)在,不到3年的時(shí)間,我們已經(jīng)收集了6000多張狗狗的照片。

        在剛剛過(guò)去的這個(gè)周末,我坐下來(lái),試圖整理手機(jī)里大量的照片。這是一項(xiàng)艱巨的任務(wù),而且我很快就注意到一個(gè)問(wèn)題——有很多照片模糊程度過(guò)高。

        現(xiàn)在,對(duì)于一般人來(lái)說(shuō),我認(rèn)為他們會(huì)刪除這些模糊的照片(或者至少將它們移到一個(gè)單獨(dú)的文件夾中)——但作為一個(gè)計(jì)算機(jī)視覺(jué)科學(xué)家,這是不可能發(fā)生的。

        相反,我編寫了一個(gè)快速的Python腳本,用OpenCV執(zhí)行模糊檢測(cè)。

        接下來(lái),我將向你展示如何使用OpenCV、Python和Laplacian算子計(jì)算圖像中的模糊量。在這篇文章的結(jié)尾,你將能夠應(yīng)用Laplacian方法到你自己的照片來(lái)檢測(cè)模糊的程度。

        拉普拉斯變換的方差

        圖1:用Laplacian算子卷積輸入圖像

        在研究如何檢測(cè)圖像中的模糊程度時(shí),我的第一步是閱讀優(yōu)秀的綜述論文,即【形狀-聚焦測(cè)量算子分析[2013 Pertuz等]】。在Pertuz等人的論文中,回顧了近36種估計(jì)圖像焦距程度的不同方法。

        https://www.semanticscholar.org/paper/Analysis-of-focus-measure-operators-for-Pertuz-Puig/8c675bf5b542b98bf81dcf70bd869ab52ab8aae9?p2df

        如果你有信號(hào)處理方面的背景,首先要考慮的方法是計(jì)算圖像的快速傅里葉變換,然后檢查低頻和高頻的分布:如果圖像只有有少量的高頻,那么圖像就會(huì)被認(rèn)為是模糊的。然而,定義什么算低數(shù)量的高頻或者什么是高數(shù)量的高頻是相當(dāng)困難的。

        相反,如果我們可以計(jì)算一個(gè)單一的浮點(diǎn)值來(lái)表示一個(gè)給定圖像的模糊程度,不是很好嗎?
        Pertuz等人回顧了許多計(jì)算這種“模糊度度量”的方法,其中一些方法簡(jiǎn)單而直接,僅使用基本的灰度像素強(qiáng)度統(tǒng)計(jì),另一些更先進(jìn)和基于特征的方法,評(píng)估圖像的局部二值模式。

        快速瀏覽完這篇論文后,我找到了我一直在尋找的理想算法:pecch - pacheco等人在他們2000年ICPR論文《亮場(chǎng)顯微鏡中的硅藻自動(dòng)聚焦:比較研究》中提出的Laplacian的變化。

        方法很簡(jiǎn)單。簡(jiǎn)單。有良好的推理。并且只需要一行代碼就可以實(shí)現(xiàn):

        cv2.Laplacian(image, cv2.CV_64F).var()

        你只需采取一個(gè)圖像的單一通道(大概灰度)和卷積它與以下3 x 3的內(nèi)核:

        然后取響應(yīng)的方差(即標(biāo)準(zhǔn)差的平方)。
        如果方差低于預(yù)先定義的閾值,則認(rèn)為圖像模糊;否則,圖像不會(huì)模糊。

        這種方法有效的原因是由于Laplacian算子本身的定義,它用于測(cè)量圖像的二階導(dǎo)數(shù)。拉普拉斯算子突出顯示圖像中包含快速梯度變化的區(qū)域,很像Sobel和Scharr算子。和這些算子一樣,Laplacian也經(jīng)常用于邊緣檢測(cè)。這里的假設(shè)是,如果一幅圖像的方差較高,那么就說(shuō)明圖像有廣泛的響應(yīng),包括類邊和非類邊,這是一幅正常的聚焦圖像的代表。但如果方差很低,那么就會(huì)有很小的響應(yīng)擴(kuò)散,這表明圖像中幾乎沒(méi)有邊緣。而圖像越模糊,邊緣就越少。所以可以用來(lái)檢測(cè)是否模糊。

        顯然,這里的關(guān)鍵是設(shè)置正確的閾值,而閾值的設(shè)置與應(yīng)用到的圖像集相關(guān)。如果閾值過(guò)低,你就會(huì)錯(cuò)誤地將原本不模糊的圖像標(biāo)記為模糊。如果閾值過(guò)高,那么實(shí)際上模糊的圖像將不會(huì)被標(biāo)記為模糊。這種方法只有在非常穩(wěn)定的圖像集(同一類型)中應(yīng)用良好。

        檢測(cè)圖像中模糊的數(shù)量

        所以現(xiàn)在我們已經(jīng)明確了將要使用的方法:計(jì)算一個(gè)單一的度量來(lái)表示一個(gè)給定的圖像是多么“模糊”,讓我們看看我們的數(shù)據(jù)集以下12張圖像:

        圖3:我們的圖像集。有些模糊,有些則不然。我們的目標(biāo)是使用OpenCV進(jìn)行模糊檢測(cè)并將圖像標(biāo)記為模糊。

        正如你所看到的,有些圖像是模糊的,有些則不是。我們的目標(biāo)是正確地標(biāo)記每個(gè)圖像模糊或非模糊。
        有了這些,打開(kāi)一個(gè)新文件,命名為detect_blur.py,讓我們打開(kāi)代碼:

        # import the necessary packagesfrom imutils import pathsimport argparseimport cv2def variance_of_laplacian(image):  # compute the Laplacian of the image and then return the focus  # measure, which is simply the variance of the Laplacian  return cv2.Laplacian(image, cv2.CV_64F).var()# construct the argument parse and parse the argumentsap = argparse.ArgumentParser()ap.add_argument("-i", "--images", required=True,  help="path to input directory of images")ap.add_argument("-t", "--threshold", type=float, default=100.0,  help="focus measures that fall below this value will be considered 'blurry'")args = vars(ap.parse_args())

        我們從在第2-4行上導(dǎo)入必要的包開(kāi)始。如果你還沒(méi)有我的imutils包在你的機(jī)器上,你會(huì)想現(xiàn)在安裝:

        $ pip install imutils

        從這里開(kāi)始,我們將在第6行定義variance_of_laplacian函數(shù)。這個(gè)方法將我們想要計(jì)算焦距的圖像(假設(shè)為單個(gè)通道,例如灰度圖像)作為參數(shù)。第9行簡(jiǎn)單地用3 x 3 Laplacian運(yùn)算符對(duì)圖像進(jìn)行卷積,并返回方差。

        第12-17行解析命令行參數(shù)。我們需要的第一個(gè)命令是——images,它是指向包含我們想要測(cè)試是否模糊的圖像數(shù)據(jù)集的目錄的路徑。

        我們還將定義一個(gè)可選參數(shù)——thresh,它是我們將用于模糊測(cè)試的閾值。如果一個(gè)給定圖像的焦距測(cè)量低于這個(gè)閾值,我們將標(biāo)記圖像為模糊。需要注意的是,您可能需要為自己的圖像數(shù)據(jù)集調(diào)優(yōu)這個(gè)值。100的值對(duì)于我的數(shù)據(jù)集似乎工作得很好,但是這個(gè)值對(duì)于圖像的內(nèi)容是非常主觀的,所以您需要自己使用這個(gè)值來(lái)獲得最優(yōu)結(jié)果。

        不管你信不信,最難的部分已經(jīng)完成了!我們只需要寫一點(diǎn)代碼從磁盤加載圖像,計(jì)算Laplacian的方差,然后將圖像標(biāo)記為模糊或非模糊:

        # loop over the input imagesfor imagePath in paths.list_images(args["images"]):  # load the image, convert it to grayscale, and compute the  # focus measure of the image using the Variance of Laplacian  # method  image = cv2.imread(imagePath)  gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  fm = variance_of_laplacian(gray)  text = "Not Blurry"  # if the focus measure is less than the supplied threshold,  # then the image should be considered "blurry"  if fm < args["threshold"]:    text = "Blurry"  # show the image  cv2.putText(image, "{}: {:.2f}".format(text, fm), (10, 30),    cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 3)  cv2.imshow("Image", image)  key = cv2.waitKey(0)

        我們從第2行開(kāi)始對(duì)圖像目錄進(jìn)行循環(huán)。對(duì)于這些圖像,我們將從磁盤加載,將其轉(zhuǎn)換為灰度,然后使用OpenCV應(yīng)用模糊檢測(cè)(第6-9行)。
        在焦點(diǎn)測(cè)量超過(guò)命令行參數(shù)提供的閾值的情況下,我們將把圖像標(biāo)記為“模糊”。
        最后,第3517-20行將文本和計(jì)算結(jié)果寫到圖像上,并將結(jié)果顯示在我們的屏幕上。

        使用OpenCV進(jìn)行模糊檢測(cè)

        現(xiàn)在我們已經(jīng)編寫了detect_blur.py腳本,讓我們嘗試一下。打開(kāi)一個(gè)shell并發(fā)出以下命令:

        $ python detect_blur.py --images images

        這張照片的計(jì)算值是83.17,低于我們的閾值100;因此,我們正確地將該圖像標(biāo)記為模糊。

        這幅圖像的計(jì)算值為64.25,這也使得我們將其標(biāo)記為“模糊”。

        圖6的計(jì)算值很高,為1004.14—比前兩幅圖高了幾個(gè)數(shù)量級(jí)。這幅圖像顯然是非常清晰的。

        總結(jié)

        在這篇博文中,我們學(xué)習(xí)了如何使用OpenCV和Python執(zhí)行模糊檢測(cè)。

        我們實(shí)現(xiàn)了計(jì)算Laplacian方法的方差,得到一個(gè)浮點(diǎn)值來(lái)表示圖像的“模糊”程度。這種方法快速、簡(jiǎn)單、易于應(yīng)用——我們只需用Laplacian算子對(duì)輸入圖像進(jìn)行卷積并計(jì)算方差。如果方差低于預(yù)先定義的閾值,我們將圖像標(biāo)記為“模糊”。
        需要注意的是,閾值是正確調(diào)優(yōu)的一個(gè)關(guān)鍵參數(shù),您經(jīng)常需要根據(jù)每個(gè)數(shù)據(jù)集對(duì)其進(jìn)行調(diào)優(yōu)。

        —版權(quán)聲明—

        僅用于學(xué)術(shù)分享,版權(quán)屬于原作者。

        若有侵權(quán),請(qǐng)聯(lián)系微信號(hào):yiyang-sy 刪除或修改!


        —THE END—
        瀏覽 72
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            久久riav | 国产午夜精品一区二区三区_久久精品无 | 日韩中文字幕在线免费观看 | 黄色一级片视频 | 1000部做爰免费视频 | 波多野结衣久久 | 黄工厂精品免费观看 | 天天操天天艹 | 国产00粉嫩馒头一线天APP | 超碰日韩在线 |