青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

卷積與平滑濾波器的圖像處理應(yīng)用

卷積的介紹

卷積(convolution)是泛函分析里的一個(gè)概念,不過泛函分析一般都是數(shù)學(xué)系才學(xué)的,計(jì)算機(jī)系的學(xué)生大多在概率統(tǒng)計(jì)課本里了解到。它分為兩種形式,一個(gè)是離散形式,一個(gè)是連續(xù)(積分)形式。在圖像處理中我們更關(guān)心離散卷積,不過也先看看積分形式的卷積。現(xiàn)在假設(shè)我們有兩個(gè)函數(shù)f(x)g(x),這里g(x)又叫做平滑函數(shù)或者卷積核,那么它們?cè)谶B續(xù)空間的卷積是:

(f*g)(x)=\int_{-\infty}^{\infty}f(t)g(x-t)dt

一般我們有一個(gè)這樣的結(jié)論,就是當(dāng)f(x)經(jīng)過足夠多次相同平滑函數(shù)g(x)卷積,就會(huì)足夠接近高斯函數(shù),也就是正態(tài)分布的函數(shù)形式。卷積就是一種平滑操作,這說明高斯函數(shù)就是“最平滑的函數(shù)”。引入熱力學(xué)中熵的概念,高斯函數(shù)就是擁有最高熵的函數(shù),最穩(wěn)定的狀態(tài),以至于自然界大多數(shù)的統(tǒng)計(jì)規(guī)律都呈現(xiàn)出正態(tài)分布:

((\cdots((f*g)*g)\cdots)*g)(x) \rightarrow \frac 1{\sigma\sqrt{2\pi}} e^{-x^2/{\sigma^2}}

下面介紹離散形式的卷積。這卷積,首先是由有限項(xiàng)的多項(xiàng)式體現(xiàn)。神奇的是,而它們的乘積就是卷積。首先我們?cè)O(shè)有兩個(gè)多項(xiàng)式p = a_0 + a_1 x + a_2 x^2以及q = b_0 + b_1 x + b_2 x^2 + b_3 x^3。計(jì)算它們的乘積:

\begin{align*} r = p\cdot q &= (a_0 b_0) \\ &+ (a_0 b_1 + a_1 b_0) x \\ &+ (a_0 b_2 + a_1 b_1+ a_2 b_0) x^2 \\ &+ (a_0 b_3 + a_1 b_2 + a_2 b_1) x^3 \\ &+ (a_1 b_3 + a_2 b_2) x^4 \\ &+ (a_2 b_3) x^5 \end{align*}

再引入離散形式卷積(向量卷積)的定義,大家比較一下這個(gè)定義和上面多項(xiàng)式的計(jì)算。稍微說明一下,中括號(hào)的意義是p[n]代表向量第n個(gè)元素。將兩個(gè)多項(xiàng)式的系數(shù)寫成向量形式然后進(jìn)行向量卷積,也就是例如p = [a_0, a_1, a_2],而沒定義的地方當(dāng)作0。可以發(fā)現(xiàn),兩者是完全一致的:

\begin{align*} (p * q)[n] &= \sum_{m=-\infty}^\infty p[m]\cdot q[n-m] \\ r[1] &= \sum_{m=0}^1  p[m]\cdot q[1-m] &&= a_0 b_1 + a_1 b_0 \\ r[2] &= \sum_{m=0}^2  p[m]\cdot q[2-m] &&= a_0 b_2 + a_1 b_1 + a_2 b_0 \\ &\cdots \end{align*}

知道了多項(xiàng)式的乘積就是其相應(yīng)的卷積,我們甚至可以直接得出兩個(gè)冪級(jí)數(shù)卷積的結(jié)果。因?yàn)樘├占?jí)數(shù)就是冪級(jí)數(shù)的一種,所以我們可以將幾乎所有的連續(xù)函數(shù)轉(zhuǎn)換成離散形式,避免了繁復(fù)的積分運(yùn)算:比如我們希望得到 r(x) = p(x) * q(x),其中p(x) = \sum a_i x^i,\  q(x) = \sum b_i x^i,只需要簡單地計(jì)算這兩個(gè)級(jí)數(shù)的柯西乘積,所得結(jié)果就是r(x)的卷積。當(dāng)然了,這是后話,與本文的主題無關(guān)。

卷積與圖像處理

在開始講圖像處理之前,我希望先理解一下卷積的整個(gè)過程是怎樣的。從上面的公式看得還是有點(diǎn)懵懵懂懂,從直覺上去理解一下很有必要。觀察卷積的公式以及下面的圖片,這個(gè)過程可以看作,當(dāng)你想求一個(gè)r[n]的時(shí)候:

你先把卷積核q疊在p上面,盡量使左端靠近(如果左對(duì)齊就再好不過了),然后看看在[0, n]內(nèi)p, q重疊的部分是從哪里到哪里,分別寫成向量,那么r[n]就等于其中一個(gè)向量與另一個(gè)向量的逆序的內(nèi)積。

比如當(dāng)n = 2時(shí),兩個(gè)向量是[a_0, a_1, a_2][b_2, b_1, b_0];n = 4時(shí),兩個(gè)向量是[a_1, a_2, a_3, a_4][b_3, b_2, b_1, b_0]。至于求內(nèi)積,一定難不倒你。下圖說明了這一點(diǎn):

\begin{align*} && a_0    && a_1    && a_2    && a_3    && a_4 \\ && a_0b_0 && a_0b_1 && a_0b_2 && a_0b_3 \\ &&        && a_1b_0 && a_1b_1 && a_1b_2 && a_1b_3 \\ &&        &&        && a_2b_0 && a_2b_1 && a_2b_2 && a_2b_3 \\ &&        &&        &&        && a_3b_0 && a_3b_1 && a_3b_2 && a_3b_3 \\ &&        &&        &&        &&        && a_4b_0 && a_4b_1 && a_4b_2 && a_4b_3 \\ \hline && c_0    && c_1    && c_2    && c_3    && c_4    && c_5    && c_6    && c_7 \end{align*}

上面是對(duì)某一點(diǎn)上卷積的理解。對(duì)整個(gè)域的卷積,則可以看成是將卷積核(除了開頭幾個(gè)外)不停向右移動(dòng),每移動(dòng)一格就將重疊部分拿出來求內(nèi)積。

這時(shí)我們可以把圖像處理和卷積聯(lián)系起來了。圖像處理是,將一副“源圖像”(Source),通過一些算法,變成一副“目標(biāo)圖像”(Destination)。當(dāng)我們進(jìn)行平滑處理的時(shí)候,用到一個(gè)叫做濾波器(filter)的 東西,也叫做濾鏡。想想我們現(xiàn)實(shí)生活中放大鏡是怎么用的:拿著放大鏡,從報(bào)紙的左上角開始,一直掃啊掃到右下角,掃的過程中一直望著放大鏡和報(bào)紙的重疊區(qū) 域(其實(shí)就是望著放大鏡,因?yàn)樗葓?bào)紙小多了),這樣你就瀏覽完了一張放大過的報(bào)紙。平滑濾鏡也是同樣的使用方法,從源圖的左上角開始掃到右下角,掃的過 程中一直取出重疊部分進(jìn)行內(nèi)積計(jì)算,然后將結(jié)果存放到目標(biāo)圖像中 —— 顯然這個(gè)操作跟卷積是一致的,只不過定義在二維空間內(nèi)。

為了方便量化表示,我們把圖像抽象成定義在R \cap [0, 1] 數(shù)環(huán)內(nèi)的二維矩陣,其意義是灰度值,顏色信息我們暫且忽略。卷積核,也就是濾波器同樣也是定義在R \cap [0, 1] 內(nèi)的二維矩陣。這樣,二維的卷積我們這樣定義它的離散形式:

\text{Dest}[i, j] = \sum_{y=-\infty}^\infty \sum_{x=-\infty}^\infty \text{Src}[y,x] \cdot \text{Ker}[i - y, j - x]

我們的卷積核大小并不是無限的,它一個(gè)半徑r,這樣它的大小就是2r+1。規(guī)定了這個(gè)r使得,當(dāng)|x| > r 或 |y| > r,都有Ker[y, x] = 0。規(guī)定過大小之后,由 |i-y| < r; |j-x| < r得到 i-r < y < i+r; j-r < x < j+r。同時(shí)我們規(guī)定Dest和Src的大小是m \times n。于是我們得到了濾波器的算法:

\text{Dest}[i, j] = \sum_{y=\max\{0,i-r\}}^{\min\{i+r,n\}} \left( \sum_{x=\max\{0,j-r\}}^{\min\{j+r,m\}} \text{Src}[y, x] \cdot \text{Ker}[i - y, j - x] \right)

高斯濾波器

二維的高斯函數(shù)(俗稱避孕套函數(shù))
二維的高斯函數(shù)(俗稱避孕套函數(shù))

高斯濾波器是最常用的平滑濾波器之一,在Photoshop里面它被用作高斯模糊濾鏡。高斯濾波器的定義很經(jīng)典,就是簡單地把正態(tài)分布離散開來。二維形式只是單純把x替代成(x2 + y2),然后修改系數(shù)令實(shí)數(shù)域上的積分為1:

\begin{align*} \text{Ker}_1[x] &= \frac 1{\sigma\sqrt{2\pi}} e^{-x^2/{\sigma^2}} \\ \text{Ker}_2[i, j] &= \frac 1{2\sigma^2\pi} e^{-(i^2+j^2)/{\sigma^2}} \end{align*}

也許你已經(jīng)發(fā)現(xiàn)了一個(gè)這樣的規(guī)律,這一規(guī)律,這在更高維上仍然是滿足的,也就是在連續(xù)空間里同樣滿足。這將成為我們優(yōu)化算法的關(guān)鍵。將這個(gè)規(guī)律代回到二維離散卷積的公式里,因?yàn)閥在第二個(gè)連加中相當(dāng)于常數(shù)系數(shù)可以提出來,我們發(fā)現(xiàn):

\begin{align*} \text{Ker}_2[i, j] &= \text{Ker}_1[i] \cdot \text{Ker}_1[j] \\ \text{Dest}[i, j] &= \sum_{y=-\infty}^\infty \sum_{x=-\infty}^\infty \text{Src}[y,x] \cdot \text{Ker}_2[i - y, j - x] \\ &= \sum_{y=-\infty}^\infty \sum_{x=-\infty}^\infty \text{Src}[y,x] \cdot \text{Ker}_1[i-y] \cdot \text{Ker}_1[j-x]\\ &= \sum_{y=-\infty}^\infty \left( \sum_{x=-\infty}^\infty \text{Src}[y,x] \cdot \text{Ker}_1[j-x]\right) \text{Ker}_1[i-y] \end{align*}

如果x連加所表示是卷積是從右上角開始按照文字書寫順序從左到右,然后從上到下的順序進(jìn)行一維卷積,那么y連加表示的卷積就是先從上到下,再從左到有的順序卷積。在OpenCV提供的數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上,不用imgproc提供的算法,我寫了一個(gè)示例:


 1 // cflags: -lopencv_highgui -lopencv_core
 2 
 3 #include <iostream>
 4 #include <cmath>
 5 #include <opencv2/highgui/highgui.hpp>
 6 
 7 using namespace cv;
 8 using namespace std;
 9 
10 const char* title = "gaussian-filter";
11 
12 Mat kernelMatrix(int radius, double sigma)
13 {
14         int d = radius * 2 + 1;
15         Mat kernel(2, d, CV_64F);
16 
17         double coef = 0;
18         for(int i = 0; i <= radius; i++) {
19                 // f(x) = 1/(sigma * sqrt(2 pi)) * e ^ -x^2/(2 s^2)
20                 int dx = i - radius;
21                 double dx_2 = dx * dx;
22                 double w = pow(M_E, - dx_2 / (2 * sigma * sigma));
23 
24                 coef += w;
25                 kernel.at<double>(0, i) = w;
26                 kernel.at<double>(0, d - i - 1= w;
27                 // when you used values from i to j (j>i), the sum of them is:
28                 // kernel[1, j] - (i ? kernel[1, i-1] : 0)
29                 kernel.at<double>(1, i) = coef;
30         }
31 
32         for(int i = radius + 1; i < d; i++) {
33                 coef += kernel.at<double>(0, i);
34                 kernel.at<double>(1, i) = coef;
35         }
36 
37         return kernel;
38 }
39 
40 
41 void convolution(const Mat& img, const Mat& kernel, Mat& output, bool t = true)
42 {
43         for(int y = 0, x = 0; y < img.rows; x = (++x<img.cols)? x : (y++0)) {
44                 Vec3d r(000);
45 
46                 int ideal = x - int(kernel.cols / 2),
47                     ran_beg = max(ideal, 0- ideal,
48                     ran_end = min(ideal + kernel.cols, img.cols) - ideal;
49 
50                 for(int i = ran_beg; i < ran_end; i++) {
51                         double weight = kernel.at<double>(0, i);
52                         Vec3b pixel = img.at<Vec3b>(y, ideal + i);
53 
54                         r[0+= pixel[0* weight;
55                         r[1+= pixel[1* weight;
56                         r[2+= pixel[2* weight;
57                 }
58 
59                 double coef = kernel.at<double>(1, ran_end - 1);
60                 if(ran_beg) coef -= kernel.at<double>(1, ran_beg - 1);
61 
62                 output.at<Vec3b>(t?x:y, t?y:x) = Vec3b(
63                         saturate_cast<uchar>(r[0]/coef),
64                         saturate_cast<uchar>(r[1]/coef),
65                         saturate_cast<uchar>(r[2]/coef));
66         }
67 }
68 
69 
70 int main()
71 {
72         namedWindow(title, WINDOW_AUTOSIZE);
73 
74         const int r = 10;
75 
76         Mat img = imread("ai-sample.jpg"),
77             kernel = kernelMatrix(r, (r - 1* 0.3 + 0.8);
78 
79         Mat product_v = Mat(img.cols, img.rows, img.type());
80         Mat product_h = Mat(img.rows, img.cols, img.type());
81 
82         convolution(img, kernel, product_v);
83         convolution(product_v, kernel, product_h);
84 
85         imshow(title, product_h);
86         for(; waitKey(0> 0;);
87 
88         destroyWindow(title);
89 }


渲染效果圖
渲染效果圖

posted on 2015-08-12 00:35 Shihira 閱讀(3263) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 圖形編程

導(dǎo)航

統(tǒng)計(jì)

公告

留言簿(2)

隨筆分類

搜索

最新隨筆

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区在线免费| 久久久久一区| 久久精品夜色噜噜亚洲aⅴ| 欧美一级一区| 黄色影院成人| 国产精品一区二区久久久久| 一区视频在线| 欧美日韩国产bt| 久久先锋资源| 一本在线高清不卡dvd| 欧美成人精品在线播放| 小黄鸭精品密入口导航| 国产亚洲在线| 国产精品最新自拍| 国产伦精品一区二区三区免费| 欧美国产视频日韩| 欧美成人影音| 欧美激情综合| 欧美人交a欧美精品| 欧美国产欧美综合 | 欧美电影在线观看| 欧美在线视频全部完| 欧美亚洲综合在线| 国产精品美腿一区在线看| 亚洲精品四区| 亚洲国产乱码最新视频| 亚洲欧美视频| 国产精品中文字幕在线观看| 亚洲精品美女在线观看| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲午夜精品国产| 欧美视频一二三区| 在线视频精品一区| 在线亚洲美日韩| 久久久久www| 久久久久久久久久久成人| 国外成人免费视频| 亚洲国产成人久久| 欧美电影免费观看高清完整版| 亚洲福利av| 日韩一级不卡| 激情文学一区| 亚洲国产老妈| 国产综合香蕉五月婷在线| 玖玖综合伊人| 国产精品久久久久久久久果冻传媒| 香蕉免费一区二区三区在线观看| 欧美夜福利tv在线| 亚洲看片网站| 欧美亚洲在线观看| 亚洲天堂网在线观看| 欧美亚洲网站| 亚洲女同同性videoxma| 久久爱www久久做| 亚洲精品视频在线观看免费| 一本色道久久综合亚洲91| 精品动漫一区二区| 亚洲在线免费观看| 在线亚洲自拍| 欧美区国产区| 亚洲人成在线播放网站岛国| 精久久久久久久久久久| 中文有码久久| 999亚洲国产精| 久久久久成人精品| 久久激情视频免费观看| 欧美激情按摩在线| 久久另类ts人妖一区二区| 欧美日韩mp4| 亚洲精品免费在线播放| 国产一区二区欧美日韩| 亚洲一区二区三区精品动漫| 亚洲区一区二区三区| 欧美一级网站| 美女图片一区二区| 亚洲日本理论电影| 国产精品久久久久国产a级| 在线一区二区视频| 久久九九99视频| 亚洲电影免费观看高清完整版在线 | 亚洲午夜激情网站| 国产精品一区二区三区免费观看| 久久精品视频导航| 亚洲欧美不卡| 亚洲淫性视频| 欧美一区二区视频在线观看2020 | 久久色在线播放| 欧美二区在线| 午夜一区二区三区在线观看| 欧美三日本三级少妇三99| 亚洲欧美国产另类| 亚洲国产日韩欧美综合久久| 午夜在线电影亚洲一区| 亚洲精品韩国| 亚洲欧洲综合另类在线| 国产精品视区| 欧美日韩免费精品| 欧美电影在线观看| 久久只有精品| 老司机久久99久久精品播放免费 | 欧美xart系列在线观看| 蜜桃伊人久久| 欧美日韩大片| 欧美日韩精品在线播放| 美国十次成人| 久久综合999| 久久久久久久综合色一本| 一区二区三区四区五区在线| 欧美成人一区二区三区片免费| 欧美一区二区三区免费观看| 亚洲乱码久久| 亚洲精品视频免费观看| 亚洲人成人99网站| 中文精品99久久国产香蕉| 一本色道精品久久一区二区三区| 亚洲高清一区二| 亚洲精品日韩久久| 亚洲中字黄色| 久久综合狠狠综合久久综合88 | 久久国产加勒比精品无码| 蜜桃视频一区| 欧美日韩国产综合视频在线观看| 欧美久久视频| 一区二区三区在线视频免费观看| 最新中文字幕亚洲| 久久综合伊人77777麻豆| 亚洲一区二区三区四区五区黄| 另类图片国产| 最新国产乱人伦偷精品免费网站 | 欧美成人精品影院| 欧美 日韩 国产一区二区在线视频| 久久成人资源| 亚洲欧洲视频| 久久九九99视频| 欧美午夜不卡视频| 伊人一区二区三区久久精品| 亚洲天堂成人在线视频| 欧美国产日韩一区二区在线观看| 亚洲天堂av在线免费| 久久婷婷一区| 国内揄拍国内精品久久| 亚洲一二三四久久| 亚洲人成亚洲人成在线观看| 久久久久一区| 国内精品视频在线播放| 欧美在线视频在线播放完整版免费观看 | 亚洲第一精品电影| 久久午夜精品| 午夜精品久久久久久久99热浪潮| 欧美视频在线观看视频极品| 欧美在线不卡| 国产精品免费一区豆花| 亚洲狼人综合| 亚洲人永久免费| 国产精品成人久久久久| 在线亚洲欧美| 亚洲一区视频在线| 精品88久久久久88久久久| 久久一区精品| 欧美成人精品h版在线观看| 99成人在线| 国产精品99久久久久久白浆小说 | 欧美一区二区三区视频在线| 一区二区三区日韩欧美| 国产欧美一区二区在线观看| 久久久久欧美精品| 久久免费国产精品| 在线亚洲一区二区| 久久国产99| 在线视频日本亚洲性| 一本色道久久88精品综合| 欧美日韩一区不卡| 欧美一区二区在线| 久久精品国产欧美激情| 日韩一二在线观看| 久久久久国产精品一区| 中日韩美女免费视频网址在线观看| 亚洲欧美成人精品| 亚洲精品久久久久久久久久久| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲高清久久| 久久午夜精品一区二区| 久久精品国产亚洲aⅴ| 欧美日韩一区二区免费在线观看| 久久久久久欧美| 国产欧美视频一区二区三区| 亚洲深夜福利在线| 亚洲精品中文字幕在线| 欧美一区二区三区在线看 | 国产欧美日韩一区二区三区| 国产精品自拍视频| 日韩视频免费观看高清完整版| 国产最新精品精品你懂的| 日韩一级精品视频在线观看| 在线色欧美三级视频| 欧美~级网站不卡| 99视频精品免费观看| 亚洲国产精品va| 欧美日本在线观看| 午夜精彩视频在线观看不卡|