各向異性濾波演算法 數學模型分析

2021-07-28 12:41:43 字數 3043 閱讀 8995

主要是用來平滑影象的,克服了高斯模糊的缺陷,各向異性擴散在平滑影象時是保留影象邊緣的(和雙邊濾波很像)。

通常我們有將影象看作矩陣的,看作圖的,看作隨機過程的,記得過去還有

看作力場的。

這次新鮮,將影象看作熱量場了。每個畫素看作熱流,根據當前畫素和周圍畫素的關係,來確定是否要向周圍擴散。比如某個鄰域畫素和當前畫素差別較大,則代表這個鄰域畫素很可能是個邊界,那麼當前畫素就不向這個方向擴散了,這個邊界也就得到保留了。

先看下效果吧:

具體的推導公式都是熱學上的,自己也不太熟悉,感興趣的可以去看原**,引用量超7000吶。

我這裡只介紹一下最終結論用到的公式。

主要迭代方程如下:

其中lamda取值[0,1/4],其中1/4表示四個方向擴散平均量(可以說保證不溢位),可以用來調節平滑性!!!可能有些人對於上面的式子會不會存在畫素值溢位的情況!這裡說明下,可以說絕對不會,因為上面是擴散的原理,擴散告訴我們大的往小的跑達到中和平滑的目的,假如中心點的畫素的值為255,那麼周圍畫素要麼相等要麼小於,故這樣的中心的畫素的值只會往外面擴散,或者不動不擴散!

i就是影象了,因為是個迭代公式,所以有迭代次數t。

四個散度公式是在四個方向上對當前畫素求偏導,news就是東南西北嘛,公式如下:

而cn/cs/ce/cw則代表四個方向上的導熱係數,邊界的導熱係數都是小的。公式如下:

最後整個公式需要先前設定的引數主要有三個,迭代次數t,根據情況設定;導熱係數相關的k,取值越大越平滑,越不易保留邊緣(失去對邊沿資訊保留,即邊沿資訊將擴散掉,結合函式模型去理解);lambda同樣也是取值越大越平滑。

那麼問題來了,為什麼用這樣的數學模型?鄙人真心難解釋,我深深的仰望前輩們,也希望可以在前輩們的豐功偉績中吸收點養分!

經過抓撓了一段時間,將上面的關係建成數學表示式,試圖通過幾何畫出該函式的模型:

其中f(x)=x*exp(-x^2)(該模型可以說是高斯函式一階導函式:達到sobel+高斯的雙重合併效果) ,上圖紅線表示高斯函式,藍線表示高斯的一階導函式。

通過該函式圖分析,的確很清晰的表明了關係,當x大到一定程度的時候其函式值收斂為0,這也就是說明當畫素之間的差值很大的時候,函式值也是為0,也就可以表明這是邊沿,這個時候不需要向外擴散。但也表明在一定的範圍內,差值在一定範圍內,也就是平滑範圍,差值在該範圍內的都視為是平滑,也就是不變平擔區域,需要擴散,可能是鄰域向中間聚集,可能是中心向外擴散。擴散過程就是讓中心與周圍的畫素的差異不要太大,分一點給他們,或者他們分一點給中心,因此該演算法用於平滑影象,同時又極大程度的保留了邊沿,這也是高斯演算法和均值演算法無法比你的優勢!!!

除了上面的函式模型外還有另外乙個函式:

這個函式模型也是可以的,f(x) = 1/(1+(x/k)^2),對於上面的模型其中k=1

以上兩個函式模型比較:

兩者太相似了,兄弟函式!我們找這樣函式的本質是當值很大(正無窮或者負無窮)的時候收斂於0!

最後是matlab**:

clear all;

close all;

clc;

k=15

; %導熱係數,控制平滑

lambda=0.15

; %控制平滑

n=20

; %迭代次數

%當前畫素的散度,對四個方向分別求偏導,區域性不同方向上的變化量,

%如果變化較多,就證明是邊界,想方法保留邊界

ni=img(p-1,q)-img(p,q);

si=img(p+1,q)-img(p,q);

ei=img(p,q-1)-img(p,q);

wi=img(p,q+1)-img(p,q);

%四個方向上的導熱係數,該方向變化越大,求得的值越小,從而達到保留邊界的目的

cn=exp(-ni^2/(k*k));

cs=exp(-si^2/(k*k));

ce=exp(-ei^2/(k*k));

cw=exp(-wi^2/(k*k));

imgn(p,q)=img(p,q)+lambda*(cn*ni+cs*si+ce*ei+cw*wi); %擴散後的新值

endend

img=imgn; %整個影象擴散完畢,用已擴散影象的重新擴散。

endfigure;

imshow(imgn,);

參考:

1、《特徵提取與影象處理(第二版)》

各向異性濾波演算法 數學模型分析

主要是用來平滑影象的,克服了高斯模糊的缺陷,各向異性擴散在平滑影象時是保留影象邊緣的 和雙邊濾波很像 通常我們有將影象看作矩陣的,看作圖的,看作隨機過程的,記得過去還有 看作力場的。這次新鮮,將影象看作熱量場了。每個畫素看作熱流,根據當前畫素和周圍畫素的關係,來確定是否要向周圍擴散。比如某個鄰域畫素...

matlab各向異性擴散濾波

主要是用來平滑影象的,克服了高斯模糊的缺陷,各向異性擴散在平滑影象時是保留影象邊緣的 和雙邊濾波很像 通常我們有將影象看作矩陣的,看作圖的,看作隨機過程的,記得過去還有看作力場的。這次新鮮,將影象看作熱量場了。每個畫素看作熱流,根據當前畫素和周圍畫素的關係,來確定是否要向周圍擴散。比如某個鄰域畫素和...

各向異性擴散

主要是用來平滑影象的,克服了高斯模糊的缺陷,各向異性擴散在平滑影象時是保留影象邊緣的 和雙邊濾波很像 通常我們有將影象看作矩陣的,看作圖的,看作隨機過程的,記得過去還有 看作力場的。這次新鮮,將影象看作熱量場了。每個畫素看作熱流,根據當前畫素和周圍畫素的關係,來確定是否要向周圍擴散。比如某個鄰域畫素...