圖像處理 | 您所在的位置:網(wǎng)站首頁 › 屬牛女孩名字洋氣有內(nèi)(nèi)涵的 › 圖像處理 |
卷積定理 函數(shù)空間域的卷積的傅里葉變換是函數(shù)傅里葉變換的乘積。對應(yīng)地,頻率域的卷積與空間域的乘積存在對應(yīng)關(guān)系。即: ? ?? ? ?? 由卷積定理可知所有頻域的濾波理論上都可以轉(zhuǎn)化為空域的卷積作。 給定頻率域濾波器,可對其進行傅里葉逆變換得到對應(yīng)的空域濾波器;濾波在頻域更為直觀,但空域適合使用更 小的濾波模板以提高濾波速度。因為相同尺寸下,頻域濾波器效率高于空域濾波器,故空域濾波需要一個更小尺寸的模板近似得到需要的濾波結(jié)果。 空域卷積 將模板在圖像中逐像素移動,將卷積核的每個元素分別和圖像矩陣對應(yīng)位置元素相乘并將結(jié)果累加,累加和作為模板中心對應(yīng)像素點的卷積結(jié)果。通俗的講,卷積就是對整幅圖像進行加權(quán)平均的過程,每一個像素點的值,都由其本身和鄰域內(nèi)的其他像素值經(jīng)過加權(quán)平均后得到。在像素的處理上,是先將結(jié)果暫存在于一個副本,最后統(tǒng)一拷貝,故不會出現(xiàn)處理順序不同而結(jié)果不同的情況。 二維連續(xù)卷積的數(shù)學(xué)定義: ?離散形式: ?頻域濾波: 頻率域是由傅里葉變換和頻率變量 (u,v)定義的空間,頻域濾波處理過程:先對圖像進行傅里葉變換,轉(zhuǎn)換至頻率域,在頻域使用濾波函數(shù)進行濾波,最后將結(jié)果反變換至空間域。即: ?高斯函數(shù): ?形狀: 高斯函數(shù)的特殊性:高斯函數(shù)傅里葉變換仍是高斯函數(shù),但標準差已經(jīng)變化,頻域標準差越大(高斯函數(shù)越寬),變換后空域標準差越小(高斯函數(shù)越窄)。 如頻域函數(shù) 空域高斯平滑濾波: 高斯模板的生成 因為圖像是離散存儲的,故我們需要一個高斯函數(shù)的離散近似。具體地,對高斯函數(shù)進行離散化,以離散點上的高斯函數(shù)值作為權(quán)值,組成一定尺寸的模板,用此模板對圖像進行卷積。由于高斯分布在任意點處都非零,故理論上需要一個無窮大的模板,但根據(jù)"準則",即數(shù)據(jù)分布在的概率是0.9974,距離函數(shù)中心超過數(shù)據(jù)所占權(quán)重可以忽略,因此只需要計算的矩陣就可以保證對高斯函數(shù)的近似了。 假設(shè)二維模板大小,則模板上元素 處的值為: 前面的系數(shù)在實際應(yīng)用中常被忽略,因為是離散取樣,不能使取樣和為1,最后還要做歸一化作。程序: function filt=mygaussian(varargin) %參數(shù)初始化,使用varargin處理可變參數(shù)情況 siz=varargin{1};%模板尺寸 if(numel(siz)==1) siz=[siz,siz]; end std=varargin{2};%方差 centa = (siz(1)+1)/2;%此處不要取整 centb = (siz(1)+1)/2; filt = zeros(siz(1),siz(2)); summ=0; for i=1:siz(1) for j=1:siz(2) radius = ((i-centa)^2+(j-centb)^2); filt(i,j) = exp(-(radius/(2*std^2))); summ=summ+filt(i,j); end end filt=filt/summ;%歸一化測試: 執(zhí)行mygaussian(4,1)得: 0.0181???0.0492??? 0.0492??? 0.0181 0.0492???0.1336??? 0.1336??? 0.0492 0.0492???0.1336??? 0.1336??? 0.0492 0.0181???0.0492??? 0.0492??? 0.0181 執(zhí)行fspecial('gaussian',4,1)得: 0.0181???0.0492??? 0.0492??? 0.0181 0.0492???0.1336??? 0.1336??? 0.0492 0.0492???0.1336??? 0.1336??? 0.0492 0.0181???0.0492??? 0.0492??? 0.0181 可以看出與Matlab結(jié)果相同。查看fspecial的Matlab源碼,將gaussian部分提取出來: function h = hisfspecial(varargin) siz=varargin{1}; if(numel(siz)==1) siz=[siz,siz]; end std = varargin{2}; siz = (siz-1)/2; [x,y] = meshgrid(-siz(2):siz(2),-siz(1):siz(1)); arg = -(x.*x + y.*y)/(2*std*std); h = exp(arg); h(h |
今日新聞 |
推薦新聞 |
專題文章 |
CopyRight 2018-2019 實驗室設(shè)備網(wǎng) 版權(quán)所有 |