散度与梯度在图像中的应用
梯度和散度概念
首先回顧一下梯度和散度的概念。這里給出梯度和散度的公式:
對于u = u(x,y,z),
那么u的梯度就為:,梯度操作的是函數,得到的是偏導數作為各分量構成一個向量。
而散度則為
參考:
http://www.zhihu.com/question/24591127
Nonlocal Variational Model for Pansharpening Image Fusion
在了解了梯度和散度的的概念之后,我們將其應用到圖像中去。首先,我們經常用到的是求圖像的梯度,也就是使用差分法分別在圖像的x,y方向求得圖像的梯度分量,然后利用sqrt(x.^2 + y.^2)就生成了圖像的梯度圖了。那按照散度的公式,如果我們將x,y方向的梯度分量當做2個向量場,即把x當做P(x,y,z),y當做Q(x,y,z),那么繼續對x,y方向的梯度分量求梯度就可以得到散度公式中的2個加數,得到的正是下面所說的zx_x和zy_y。對于某點來說,也就是得到了該點的流動速率。
下面詳細一些說明:
1. 什么是散度
1.1 散度的定義
散度是作用在向量場上的一個算子。
用三維空間來舉例,向量場就是在空間每一點處都對應一個特殊的三維向量的向量函數:
。比如海洋里,各點在單位時間單位體積中水的流量就是一個三維場,這個場也稱為通量。
散度算子定義為:
。
它是一個標量函數(場),也就是說,在定義空間中每一點的散度是一個值。
1.2 散度的物理意義
用水流來解釋,散度的物理意義可以敘述為:
- 如果一點的散度大于0,那么在這一點有一個水龍頭不斷往外冒水(稱為源點)
- 如果一點的散度小于0,那么在這一點有一個下水道,總有一些水只進不出(稱為匯點)
- 如果一點的散度等于0,那么請放心,在這個點周圍的小區域里,單位時間進來多少水就出去多少水。
1.3 數學推導
咱們來看看在一點的附近到底發生了什么。以這一點為中心,用一個邊長分別為的平行于坐標軸的長方體盒子包圍它,來詳細分析長方體各表面水向外跑了多少。先看盒子在方向上的兩個面:
第一個面是一個面積為的長方形,它的中心坐標是,這一點的通量是,用Taylor展開式可以近似為:,又因為這一長方形的外法線方向是,因此這一面在單位時間向外的流量就是二者相乘再乘以面積,由于法線的特殊形式,y、z分量自動消失了:
同理,在x負半軸上的那個面單位時間向外的流量是:
因此單位時間在x方向上的總的向外的流量是:
把三個坐標軸向外的流量加在一起,我們就得到了圍繞點,體積為的長方體單位時間向外的流量是。
從上面的推導立即可以得出結論:
- 在一個區域中,單位時間向外的總流量就是把每一個小區域向外的流量加起來(內部相互抵消,最終只有區域邊界上的值得以展現):
- 平均到一個點上,單位時間向外流量的密度就是
- 一個區域無論多復雜,只要不包含源點和匯點,其上散度的積分一定為0
1.4 散度與擴散
假設在空間中有一個濃度場,則在每一點都有一個濃度上升最快的方向,我們稱其為梯度,它是一個向量場。濃度差帶來的后果就是空間物質會發生運動,從高濃度向低濃度運動,其結果就是濃度中和,趨向平衡。這種運動可以用一個偏微分方程描述:
這個方程被形象地稱為擴散方程,來源于物理上的連續性方程。等式右邊一定是負散度,因為若一個點散度為正,說明它濃度大,擴散應該減少它的值,然而因為濃度對應的運動場是梯度的負值(高濃度向低濃度流動),因此恰好內外兩個負號抵消了,最終右端就出現了貌似不科學的正散度結果,不要被迷惑住。散度算子內部的量可以是標量,也可以是矩陣,用于調節濃度差與擴散方向之間的關系。
為了更加直觀地理解,咱先略去多余因子,這樣方程就變成了:
等式右邊被稱為Laplace算子,一般用一個正三角來簡寫,你可以用二階導數來理解它。在一小段時間間隔上,這個方程又可以離散化為:
直接含義就是:在每個小時間段內,如果一個點的二階導數大于0,則把它的濃度增加一些,如果一個點二階導數小于0,則把它的濃度降低一些。因為二階導數大于0的點往往是下凹的點,是局部極小值,因此增加它可以讓局部濃度變平滑;類似地,二階導數小于0的點往往是上凸點,是局部極大值,要減少它才能更平滑。
當時間趨向于無窮大時,方程達到穩定,左端為0,那么我們就得到穩定值滿足的條件:整個區域上散度為0。也可以理解為最終消滅了所有的源點和匯點,場變得光滑了。?
2. 散度在圖像去噪中的應用
在圖像領域散度算子主要用在去噪中。假設一幅圖像為,它的梯度算子是一個二維場,那么我們立即可以用散度算子構造一個擴散方程:
把這個擴散方程作用于圖像就可以去噪了,上面已經解釋了它的作用過程是比較圖像上的每個點,如果一個點值比周圍點低,就增加它,如果比周圍點高,就減少它,實質就是平滑圖像。但是由于它是各向同性的均勻擴散方程,導致圖像上所有細節均勻模糊,去噪效果很糟糕。
Perona和Malik在90年代初發現,由于圖像邊緣往往處在梯度值較大的點處,如果擴散方程在梯度值較大的區域減速擴散,在梯度值較小的區域加速擴散,則可以在著重去噪的同時保護圖像有用細節。他們修改后的擴散方程就是有名的P-M方程:
其中函數g是一個遞減函數,保證隨圖像梯度模值增大函數值遞減,起到只在圖像平滑區域(小梯度點)猛烈擴散的作用。同時,這個方程還可以變形為在圖像局部沿邊緣方向和跨邊緣方向上的兩個一維擴散之和,好的算法能保證在沿著邊緣方向擴散地多,跨邊緣擴散地少,也就是保證c_2" src="http://zhihu.com/equation?tex=c_1%3Ec_2" eeimg="1" >,起到在去噪的同時保護邊緣的作用。散度形式和方向導數形式的擴散方程是隨后P-M方程改進的兩個主要方向。
基于擴散方程的去噪方法的優點主要有:
缺點主要有:
?
代碼:
% 生成7×7整數型的矩陣 z = randi(7,7); [zx,zy] = gradient(z); div = divergence(zx,zy);[zx_x,zx_y] = gradient(zx); [zy_x,zy_y] = gradient(zy); % divergence(zx,zy) =zx_x + zy_y res = zx_x + zy_y - divergence(zx,zy); function [imx,imy,imnorm] = my_gradient(im) % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 該函數用來求圖像的梯度 % % 輸入: % % im : 輸入圖像 % % 輸出: % % imx : 圖像x方向的梯度 % % imy : 圖像y方向的梯度 % % imxy : 圖像梯度的幅值 % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % imx = [im(:,end,:) - im(:, 1,:),-diff(im,1,2)]; imy = [im(end,:,:) - im(1, :,:);-diff(im,1,1)]; imnorm = sqrt(imx.^2 + imy.^2);end總結
以上是生活随笔為你收集整理的散度与梯度在图像中的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shell日志切割
- 下一篇: CocoaPods打包静态库