<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【干貨】一個簡單方法識別毛玻璃、高斯模糊

          共 2078字,需瀏覽 5分鐘

           ·

          2021-08-01 02:49

             作者:晟沚          

                  


          前  言


             本文主要推薦一種簡單的方法識別帶有毛玻璃、高斯模糊等效果的圖片。

              


          01

          毛玻璃效果

          毛玻璃效果的原理,即遍歷每一個像素,隨機(jī)選取這個像素周圍的某一個像素,替換當(dāng)前像素。可以使用opencv實現(xiàn),代碼如下:

          #coding:utf-8import cv2import numpy as npimport random
          img = cv2.imread('test.jpg',1)shape = img.shapeh = shape[0]w = shape[1]dst = np.zeros((h,w,3),np.uint8)mm = 8 for m in range(h-mm): for n in range(w-mm): index = int(random.random()*8) (b,g,r) = img[m+index,n+index] dst[m,n] = (b,g,r)cv2.imwrite("result.jpg", dst)


          整個過程即選擇周圍像素的范圍距離最大為8像素,運行以上代碼前后如下圖:




          02

          識別毛玻璃等模糊效果

          接下來介紹如何使用OpenCV、Python和Laplacian算子計算圖像中的模糊量,

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

          本文介紹的方法可以計算一個單一的浮點值來表示一個給定圖像的模糊程度,只需采取一個圖像的單一通道(大概灰度)和卷積它與以下3 x 3的內(nèi)核,然后取響應(yīng)的方差(即標(biāo)準(zhǔn)差的平方)。如果方差低于預(yù)先定義的閾值,則認(rèn)為圖像模糊;否則,圖像不會模糊。

          方法很簡單,如下一行代碼就可

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

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

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

          具體實現(xiàn)代碼如下,定義variance_of_laplacian函數(shù)。這個方法將我們想要計算焦距的圖像(假設(shè)為單個通道,例如灰度圖像)作為參數(shù), 先讀取輸入圖像圖像,再將其轉(zhuǎn)換為灰度,然后使用OpenCV應(yīng)用模糊檢測,通過自己設(shè)定的閾值即可區(qū)分出模糊圖片和不模糊圖片。

          import cv2def variance_of_laplacian(image):  return cv2.Laplacian(image, cv2.CV_64F).var()
          imagePath = “test.jpg”image = cv2.imread(imagePath)gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)fm = variance_of_laplacian(gray)if fm < 100:    print("Blurry")




           

          END





          機(jī)器學(xué)習(xí)算法工程師


                                                      一個用心的公眾號


           







          瀏覽 162
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  看无码日逼 | 久久免费看视频 | 亚洲日韩一区二区无码 | 久久久久久久久久久熟女爽 | 操逼在线视频 |