91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

OpenCV怎么自定義濾波效果

發布時間:2021-08-25 10:48:36 來源:億速云 閱讀:107 作者:chen 欄目:開發技術

這篇文章主要介紹“OpenCV怎么自定義濾波效果”,在日常操作中,相信很多人在OpenCV怎么自定義濾波效果問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”OpenCV怎么自定義濾波效果”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

目錄
  • 1 空間濾波

    • 1.1 濾波過程

    • 1.2 相關和卷積

  • 2 OpenCV 函數

    • 2.1 filter2D 函數

    • 2.2 flip 函數

  • 3 代碼示例

    • 3.1 偏導數


圖像處理中,"空間域" 指的是圖像平面,因此,空間濾波可定義為:在圖像平面內對像素灰度值進行的濾波

1 空間濾波

1.1 濾波過程

如圖,Filter 是一個 3x3 濾波核,當它從圖像的左上角開始,逐個像素沿水平方向掃描,最后到右下角時,便會產生濾波后的圖像

OpenCV怎么自定義濾波效果

假設輸入圖像 $f(x, y)$,濾波后的圖像為$g(x, y)$,則其中$g(2,2)$ 和 $g(4,4)$ 的計算過程如下:

OpenCV怎么自定義濾波效果 OpenCV怎么自定義濾波效果

上圖中,以像素 (4,4) 為中心的 3x3 鄰域,和濾波核的向量點乘之積,即為 g(4,4)

g(4,4) = 240*0.1111 + 183*0.1111 + 0*0.1111 + 250*0.1111 + 12*0.1111 + 87*0.1111 + 255*0.1111 + 1*0.1111 + 94*0.1111

= 26.6666 + 20.3333 + 0 + 27.7777 + 1.3333 + 9.6666 + 28.3333 + 0 + 10.4444

= 124.55

1.2 相關和卷積

空間濾波中,相關和卷積,是容易混淆的概念,定義如下:

-相關 (Correlation),和上述的濾波過程一樣,即 濾波核 逐行掃描圖像,并計算每個位置像素點積的過程

-卷積 (Convolution),和 "相關" 過程類似,但 濾波核 要先旋轉 180°,然后再執行和 “相關” 一樣的操作

(二維中的旋轉 180°,等于濾波核沿一個坐標軸翻轉,然后再沿另一個坐標軸翻轉)

OpenCV怎么自定義濾波效果

注意:如果濾波核是對稱的,則對圖像進行相關和卷積的結果是一致的

2 OpenCV 函數

2.1 filter2D 函數

在 OpenCV 中,可自定義濾波核,然后通過 filter2D() 來完成圖像濾波

void filter2D(
     InputArray     src,              // 輸入圖像 
     OutputArray    dst,              // 輸出圖像(大小和通道數,同 src)
     int            ddepth,           // 輸出圖像的 depth
     InputArray     kernel,           // 濾波核,準確地說,是相關核
     Point  anchor = Point(-1,-1),    // 錨點位置,濾波核尺寸為奇數時,不用指定,一般取默認值 Point(-1,-1);濾波核尺寸為偶數時,需指定錨點位置
     double             delta = 0,    // optional value added to the filtered pixels before storing them in dst      
     int borderType = BORDER_DEFAULT  // 邊界處理方法
 );

filter2D() 求的是相關,并非卷積,只有當濾波核對稱時,filte2D() 才可視為卷積運算,其公式如下:

OpenCV怎么自定義濾波效果

假定濾波核 kernel 大小為 3x3,以一個像素點 src(4,4) 為例,則有:

dst(4,4) = kernel(0,0)*src(4+0-1, 4+0-1) + kernel(0,1)*src(4+0-1, 4+1-1) + kernel(0,2)*src(4+0-1, 4+2-1)

+ kernel(1,0)*src(4+1-1, 4+0-1) + kernel(1,1)*src(4+1-1, 4+1-1) + kernel(1,2)*src(4+1-1, 4+2-1)

+ kernel(2,0)*src(4+2-1, 4+0-1) + kernel(2,1)*src(4+2-1, 4+1-1) + kernel(2,2)*src(4+2-1, 4+2-1)

濾波核與輸入圖像的卷積點乘,對應關系如下:

OpenCV怎么自定義濾波效果

2.2 flip 函數

當濾波核不對稱時,要得到真正的卷積運算,還需 flip() 函數來完成 kernel 的二維翻轉

如果濾波核的大小為奇數,則 filter2D() 中的錨點位置可設為 Point(-1,-1),此時,默認濾波核的中心為錨點;如果濾波核的大小為偶數,則需要自定義錨點位置

OpenCV 中錨點位置的實現函數normalizeAnchor() 如下:

  void flip(
      InputArray  src,  // input array
      OutputArray dst,  // output array
      int    flipCode   // 0, flip around x-axis; positive value, flip around y-axis; negative value, flip around both axes.
  );

3 代碼示例

3.1 偏導數

自定義濾波核,利用 filter2D() 函數,實現圖像的一階和二階偏導運算

1) 一階偏導

圖像在 x 和 y 方向的一階偏導如下:

OpenCV怎么自定義濾波效果

對應濾波核為 OpenCV怎么自定義濾波效果

2) 二階偏導

同樣,在 x 和 y 方向的二階偏導如下:

OpenCV怎么自定義濾波效果

對應濾波核為 OpenCV怎么自定義濾波效果

3.2 代碼示例

#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"

using namespace cv;

int main()
{
    // 讀取圖像
    Mat src = imread("fangtze.jpg", IMREAD_GRAYSCALE);
    if (src.empty()) {
        return -1;
    }

    Mat kx = (Mat_<float>(1, 2) << -1, 1);  // 1行2列的 dx 濾波核
    Mat ky = (Mat_<float>(2, 1) << -1, 1);  // 2行1列的 dy 濾波核

    Mat kxx = (Mat_<float>(1, 3) << 1, -2, 1);     // 1行3列的 dxx 濾波核
    Mat kyy = (Mat_<float>(3, 1) << 1, -2, 1);     // 3行1列的 dyy 濾波核
    Mat kxy = (Mat_<float>(2, 2) << 1, -1, -1, 1); // 2行2列的 dxy 濾波核

    // 一階偏導
    Mat dx, dy;
    filter2D(src, dx, CV_32FC1, kx);
    filter2D(src, dy, CV_32FC1, ky);

    // 二階偏導
    Mat dxx, dyy, dxy;
    filter2D(src, dxx, CV_32FC1, kxx);
    filter2D(src, dyy, CV_32FC1, kyy);
    filter2D(src, dxy, CV_32FC1, kxy);

    // 顯示圖像
    imshow("dx", dx);

    waitKey();
}

輸出的偏導圖像如下,第一行從左到右:原圖 - dx - dy;第二行從左至右:dxy - dxx -dyy

OpenCV怎么自定義濾波效果OpenCV怎么自定義濾波效果OpenCV怎么自定義濾波效果

OpenCV怎么自定義濾波效果OpenCV怎么自定義濾波效果OpenCV怎么自定義濾波效果

到此,關于“OpenCV怎么自定義濾波效果”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

从化市| 阜阳市| 渝北区| 牙克石市| 万安县| 湛江市| 三明市| 海伦市| 阜宁县| 务川| 隆子县| 汶上县| 永清县| 阿瓦提县| 清涧县| 昆山市| 宁津县| 同心县| 句容市| 武宣县| 平塘县| 怀仁县| 霍邱县| 平陆县| 富锦市| 鄂伦春自治旗| 永福县| 凤凰县| 钟祥市| 北碚区| 潍坊市| 扬中市| 永宁县| 云安县| 普定县| 津市市| 广丰县| 嘉义市| 淮阳县| 三河市| 德阳市|