天天看點

OpenCV java 圖像基本處理-模糊 (8)

其實我們知道支付寶在支付的時候有人臉識别操作,我們在第一次開通的時候,需要我們人臉的認證操作,需要我們露臉,在手機的攝像頭面前搖搖頭,眨眨眼。其實這個過程是屬于特征提取的過程,我們下次支付的時候,我們臉部的特征會和認證的時候的特征進行比較,如果特征能夠比對上,那就是本人了

那麼這個支付寶如何根據對我們的人臉進行特征提取操作,當然這個我們并不清楚,可以知道的是使用了某些算法,對我們的人臉圖檔進行特征提取,那麼這個特征在提取之前需要對我們的人臉圖像進行預處理操作,今天說的模糊就是預處理的一個過程。

概念:

濾波(模糊)的概念和作用:

    圖像濾波增強處理實質上就是運用濾波技術來增強圖像的某些空間頻率特征,以改善地物目标與領域或背景之間的灰階反差。遙感系統成像過程中可能産生的”模糊”作用,常使遙感圖像上某些使用者感興趣的線性形迹、紋理與地物邊界等資訊顯示得不夠清晰,不易識别。需要通過采用領域處理方法來分析、比較和調整像元與其周圍相鄰像元間的對比度關系,圖像才能得到增加,也就是說

需要采用濾波增加技術處理。

一、空域濾波:使用空域卷積模闆進行的圖像處理,模闆本身被稱為空域濾波器

  1.線性濾波器:

    是線性系統和頻域濾波概念在空域的自然延伸。

    它包括:低通濾波器(低頻的通過):平滑圖像,去除噪音

        高通濾波器:邊緣增強,邊緣提取

        帶通濾波器:删除特定頻率

  2.非線性濾波器:使用模闆進行結果像素值的計算時,結果值直接取決于像素領域的值,而不使用權重和的計算方式

    它包括:中值濾波:平滑圖像,去除噪音

        最大值濾波:尋找最亮點

        最小值濾波:尋找最暗點

    平滑濾波器的主要用途:降低噪音,對大圖像處理前,删去無用的細小細節,平滑處理,恢複過分的銳化的圖像,圖像創藝

    幾種簡單的低通濾波器:

      均值濾波器:待處理像素點的值,等于其一定大小的領域内全體像素的平均值

      權重平均濾波器:待處理像素點的輸出值,等于其周圍相鄰像素的全體像素的權重平均值

      中值濾波器:用模闆區域内象素的中值,作為結果值。消除孤立的亮點(暗點),抑制噪聲,可以比較好地保留邊緣輪廓資訊和圖像的細節

    銳化濾波器:增強圖像中景物的邊緣和輪廓,印刷中的細微層次強調,軍事目辨別别、定位等

    它包括:

        基本高通濾波器:在增強了邊緣的同時,丢失了圖像的層次和背景亮度。能夠增強圖像中的小尺度地物特征。

        高增益濾波器:在增強圖像的邊緣和細節的同時,保持了原圖像的低頻成分。即增強了邊緣又保留了層次,但在增強了邊緣的同時也增強了噪音。

    微分濾波器:直接使用,與高通類似。有兩種特殊應用:梯度大于25,賦255,否則賦原值,圖象中的邊緣資訊被突出,

          背景保留。大于25,賦最大值255,否則為零,圖像中的邊緣資訊被突出,同時圖像也被二值化。

二、頻域濾波:

    低通濾波: 

      理想低通濾波器(ILPF)

      Butterworth低通濾波器(BLPF)

      指數抵通濾波器(ELPF)

      梯形低通濾波器(TLPF)

    高通濾波:

      理想高通濾波器(IHPF)

      Butterworth高通濾波器(BHPF)

      指數高通濾波器(EHPF)

      梯形高通濾波器(THPF)

帶通/帶阻濾波器:帶通允許一定頻率範圍内的信号通過而阻止其他頻率範圍内的信号通過。

上面是一些概念性的東西,本文中不會介紹那麼多,我們看一下在opencv中常用的濾波方法

均值濾波:

在opencv中均值濾波方法是blur

Imgproc.blur(src, dst1, ksize);
  Imgproc.blur(src, dst1, ksize, anchor);
  Imgproc.blur(src, dst1, ksize, anchor, borderType);      

我們先看第一種方法的效果

String filename = "D:\\svnp\\MyYan\\res\\drawable\\sanli.jpg";
    Mat src = Imgcodecs.imread(filename);
    Mat dst1=new Mat();
    Mat dst2=new Mat();
    Mat dst3=new Mat();
    Size ksize1=new Size(10,10);
    Size ksize2=new Size(20,20);
    Size ksize3=new Size(40,40);
    Imgproc.blur(src, dst1, ksize1);
    Imgproc.blur(src, dst2, ksize2);
    Imgproc.blur(src, dst3, ksize3);
    HighGui.imshow("原圖",src);
    HighGui.imshow("均值濾波ksize10*10",dst1);
    HighGui.imshow("均值濾波ksize20*20",dst2);
      HighGui.imshow("均值濾波ksize60*60",dst3);
    HighGui.waitKey(10);      
OpenCV java 圖像基本處理-模糊 (8)

可以看到的是size越大,就會更加的模糊,size的第一個值為水準方向模糊大小,size的第二個值為垂直方向模糊程度大小

為1的時候為不模糊

OpenCV java 圖像基本處理-模糊 (8)

中值濾波

Imgproc.medianBlur(Mat src, Mat dst, int ksize)      

  ksize:孔徑線性尺寸;它必須是奇數且大于1

OpenCV java 圖像基本處理-模糊 (8)

當ksize=1的時候沒有編号,ksize越大模糊程度也就越大

高斯模糊

Imgproc.GaussianBlur(src, dst,ksize, sigmaX);

    Imgproc.GaussianBlur(src, dst, ksize, sigmaX, sigmaY);

    Imgproc.GaussianBlur(src, dst, ksize, sigmaX, sigmaY, borderType);      

sigmaX方向上的高斯核标準差,具體是什麼我們就不在這裡探究了,我們看看其對圖檔的影響,當size一定

OpenCV java 圖像基本處理-模糊 (8)

當sigma的值越大,圖檔會更加的模糊