borderType= None)函數(shù)
站在用戶的角度思考問題,與客戶深入溝通,找到欒城網(wǎng)站設計與欒城網(wǎng)站推廣的解決方案,憑借多年的經驗,讓設計與互聯(lián)網(wǎng)技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站建設、網(wǎng)站設計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、主機域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務覆蓋欒城地區(qū)。
此函數(shù)利用高斯濾波器平滑一張圖像。該函數(shù)將源圖像與指定的高斯核進行卷積。
src:輸入圖像
ksize:(核的寬度,核的高度),輸入高斯核的尺寸,核的寬高都必須是正奇數(shù)。否則,將會從參數(shù)sigma中計算得到。
dst:輸出圖像,尺寸與輸入圖像一致。
sigmaX:高斯核在X方向上的標準差。
sigmaY:高斯核在Y方向上的標準差。默認為None,如果sigmaY=0,則它將被設置為與sigmaX相等的值。如果這兩者都為0,則它們的值會從ksize中計算得到。計算公式為:
borderType:像素外推法,默認為None(參考官方文檔 BorderTypes
)
在圖像處理中,高斯濾波主要有兩種方式:
1.窗口滑動卷積
2.傅里葉變換
在此主要利用窗口滑動卷積。其中二維高斯函數(shù)公式為:
根據(jù)上述公式,生成一個3x3的高斯核,其中最重要的參數(shù)就是標準差 ,標準差 越大,核中心的值與周圍的值差距越小,曲線越平滑。標準差 越小,核中心的值與周圍的值差距越大,曲線越陡峭。
從圖像的角度來說,高斯核的標準差 越大,平滑效果越不明顯。高斯核的標準差 越小,平滑效果越明顯。
可見,標準差 越大,圖像平滑程度越大
參考博客1:關于GaussianBlur函數(shù)
參考博客2:關于高斯核運算
在圖像處理以及圖像特效中,經常會用到一種成高斯分布的蒙版,蒙版可以用來做圖像融合,將不同內容的兩張圖像結合蒙版,可以營造不同的藝術效果。
I=M?F+(1?M)?B
這里I?表示合成后的圖像,F(xiàn)?表示前景圖,B?表示背景圖,M?表示蒙版,或者直接用 蒙版與圖像相乘, 形成一種漸變映射的效果。如下所示。
I=M?F
這里介紹一下高斯分布蒙版的特性,并且用Python實現(xiàn)。
高斯分布的蒙版,簡單來說,就是一個從中心擴散的亮度分布圖,如下所示:
亮度的范圍從 1 到 0, 從中心到邊緣逐漸減弱,中心的亮度值最高為1,邊緣的亮度值最低為 0. 圖像上任何一點的亮度值為:
G(i,j)=exp?d2R
其中?i,j?表示圖像上任何一點的坐標,以左上角為坐標原點,d?表示 圖像上任何一點 到圖像中心點的距離,R?表示圖像的半徑。假設圖像的高為?H?寬為?W
R=(H/2)2+(W/2)2??????????????√=12H2+W2????????√
d=(i?H/2)2+(j?W/2)2???????????????????√
IMAGE_WIDTH = 512IMAGE_HEIGHT = 392center_x = IMAGE_WIDTH/2center_y = IMAGE_HEIGHT/2R = np.sqrt(center_x**2 + center_y**2)Gauss_map = np.zeros((IMAGE_HEIGHT, IMAGE_WIDTH))# 利用 for 循環(huán) 實現(xiàn)for i in range(IMAGE_HEIGHT):
for j in range(IMAGE_WIDTH):
dis = np.sqrt((i-center_y)**2+(j-center_x)**2)
Gauss_map[i, j] = np.exp(-0.5*dis/R)# 直接利用矩陣運算實現(xiàn)mask_x = np.matlib.repmat(center_x, IMAGE_HEIGHT, IMAGE_WIDTH)mask_y = np.matlib.repmat(center_y, IMAGE_HEIGHT, IMAGE_WIDTH)x1 = np.arange(IMAGE_WIDTH)x_map = np.matlib.repmat(x1, IMAGE_HEIGHT, 1)y1 = np.arange(IMAGE_HEIGHT)y_map = np.matlib.repmat(y1, IMAGE_WIDTH, 1)y_map = np.transpose(y_map)Gauss_map = np.sqrt((x_map-mask_x)**2+(y_map-mask_y)**2)Gauss_map = np.exp(-0.5*Gauss_map/R)# 顯示和保存生成的圖像plt.figure()
plt.imshow(Gauss_map, plt.cm.gray)
plt.imsave('out_2.jpg', Gauss_map, cmap=plt.cm.gray)
plt.show()
參考文獻:阮一峰的網(wǎng)絡日志
通常,圖像處理軟件會提供"模糊"(blur)濾鏡,使圖片產生模糊的效果。
"模糊"的算法有很多種,其中有一種叫做 "高斯模糊" (Gaussian Blur)。它將 正態(tài)分布 (又名"高斯分布")用于圖像處理。
本文介紹"高斯模糊"的算法,你會看到這是一個非常簡單易懂的算法。本質上,它是一種 數(shù)據(jù)平滑技術 (data smoothing),適用于多個場合,圖像處理恰好提供了一個直觀的應用實例。
一、高斯模糊的原理
所謂"模糊",可以理解成每一個像素都取周邊像素的平均值。
上圖中,2是中間點,周邊點都是1。
"中間點"取"周圍點"的平均值,就會變成1。在數(shù)值上,這是一種"平滑化"。在圖形上,就相當于產生"模糊"效果,"中間點"失去細節(jié)。
顯然,計算平均值時,取值范圍越大,"模糊效果"越強烈。
上面分別是原圖、模糊半徑3像素、模糊半徑10像素的效果。模糊半徑越大,圖像就越模糊。從數(shù)值角度看,就是數(shù)值越平滑。
接下來的問題就是,既然每個點都要取周邊像素的平均值,那么應該如何分配權重呢?
如果使用簡單平均,顯然不是很合理,因為圖像都是連續(xù)的,越靠近的點關系越密切,越遠離的點關系越疏遠。因此,加權平均更合理,距離越近的點權重越大,距離越遠的點權重越小。
二、正態(tài)分布的權重
正態(tài)分布顯然是一種可取的權重分配模式。
在圖形上,正態(tài)分布是一種鐘形曲線,越接近中心,取值越大,越遠離中心,取值越小。
計算平均值的時候,我們只需要將"中心點"作為原點,其他點按照其在正態(tài)曲線上的位置,分配權重,就可以得到一個加權平均值。
三、高斯函數(shù)
上面的正態(tài)分布是一維的,圖像都是二維的,所以我們需要二維的正態(tài)分布。
正態(tài)分布的密度函數(shù)叫做 "高斯函數(shù)" (Gaussian function)。它的一維形式是:
[圖片上傳失敗...(image-930400-1530695631723)]
其中,μ是x的均值,σ是x的方差。因為計算平均值的時候,中心點就是原點,所以μ等于0。
[圖片上傳失敗...(image-b4ad84-1530695631723)]
根據(jù)一維高斯函數(shù),可以推導得到二維高斯函數(shù):
[圖片上傳失敗...(image-24fac0-1530695631723)]
有了這個函數(shù) ,就可以計算每個點的權重了。
四、權重矩陣
假定中心點的坐標是(0,0),那么距離它最近的8個點的坐標如下:
更遠的點以此類推。
為了計算權重矩陣,需要設定σ的值。假定σ=1.5,則模糊半徑為1的權重矩陣如下:
這9個點的權重總和等于0.4787147,如果只計算這9個點的加權平均,還必須讓它們的權重之和等于1,因此上面9個值還要分別除以0.4787147,得到最終的權重矩陣。
五、計算高斯模糊
有了權重矩陣,就可以計算高斯模糊的值了。
假設現(xiàn)有9個像素點,灰度值(0-255)如下:
每個點乘以自己的權重值:
得到
將這9個值加起來,就是中心點的高斯模糊的值。
對所有點重復這個過程,就得到了高斯模糊后的圖像。如果原圖是彩色圖片,可以對RGB三個通道分別做高斯模糊。
六、邊界點的處理
如果一個點處于邊界,周邊沒有足夠的點,怎么辦?
一個變通方法,就是把已有的點拷貝到另一面的對應位置,模擬出完整的矩陣。
七、參考文獻
clear?
close?all
%%%%%%%%%%%%%%%%%%%%%%%%%生成實驗數(shù)據(jù)集
rand('state',0)
sigma_matrix1=eye(2);
sigma_matrix2=50*eye(2);
u1=[0,0];
u2=[30,30];
m1=100;
m2=300;%樣本數(shù)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%sm1數(shù)據(jù)集
Y1=multivrandn(u1,m1,sigma_matrix1);
Y2=multivrandn(u2,m2,sigma_matrix2);
scatter(Y1(:,1),Y1(:,2),'bo')
hold?on
scatter(Y2(:,1),Y2(:,2),'r*')
title('SM1數(shù)據(jù)集')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%sm2數(shù)據(jù)集
u11=[0,0];
u22=[5,5];
u33=[10,10];
u44=[15,15];
m=600;
sigma_matrix3=2*eye(2);
Y11=multivrandn(u11,m,sigma_matrix3);
Y22=multivrandn(u22,m,sigma_matrix3);
Y33=multivrandn(u33,m,sigma_matrix3);
Y44=multivrandn(u44,m,sigma_matrix3);
figure(2)
scatter(Y11(:,1),Y11(:,2),'bo')
hold?on
scatter(Y22(:,1),Y22(:,2),'r*')
scatter(Y33(:,1),Y33(:,2),'go')
scatter(Y44(:,1),Y44(:,2),'c*')
title('SM2數(shù)據(jù)集')
end
function?Y?=?multivrandn(u,m,sigma_matrix)
%%生成指定均值和協(xié)方差矩陣的高斯數(shù)據(jù)
n=length(u);
c?=?chol(sigma_matrix);
X=randn(m,n);
Y=X*c+ones(m,1)*u;
end