空間濾波由乙個鄰域(通常是乙個較小的矩形),然後對該鄰域所包圍的影象畫素執行預定義操作產生乙個新的畫素,新畫素的座標等於鄰域的中心座標。
均值濾波器就是對這個區域的畫素取平均值給鄰域中心的那個畫素,它是線性濾波器。
這種處理可以較低影象的「尖銳」變化。常見的應用就是較低雜訊,但是一般圖象邊緣也是由影象灰度尖銳變化帶來的特性,所以均值濾波器處理存在著邊緣模糊的負面效應。
一般是下面這樣的模版。
第二個圖是帶權值的,一般離中心越近權值越大
**:
from skimage import io,data
import numpy as np
import matplotlib.pyplot as plt
def mean(x,y,step,img): #x,y是均值模板中心的那個點 step 是模板大小
sum = 0
for m in range(-int(step/2),int(step/2)+1):
for n in range(-int(step/2),int(step/2)+1):
sum = sum + img[x+m][y+n]
sum = sum/(step*step)
return sum
def function(img,step):
rows,cols = img.shape
mean_img = np.zeros((rows,cols))
for i in range(rows):
for j in range(cols):
mean_img[i][j] = img[i][j]
for m in range(int(step),rows - int(step)): #避免模板出界
中值濾波器,就是對模版區域內的畫素進行排序,然後取中值(最大值,最小值)給區域中間的座標點,這樣對整幅圖進行處理,這是非線性的濾波器。
中值濾波器對於去除椒鹽雜訊特別有效,
下邊寫乙個**,對一幅影象加上椒鹽雜訊,然後進行中值濾波器的操作看一下效果。
from skimage import io,data
import numpy as np
import matplotlib.pyplot as plt
def mid(x,y,step,img): #x,y是均值模板中心的那個點 step 是模板大小
coninter=
for m in range(-int(step/2),int(step/2)+1):
for n in range(-int(step/2),int(step/2)+1):
coninter.sort()
return coninter[int((step*step)/2)+1]
def function(img,step):
rows,cols = img.shape
mid_img = np.zeros((rows,cols))
for i in range(rows):
for j in range(cols):
mid_img[i][j] = img[i][j]
for m in range(int(step),rows - int(step)): #避免模板出界
左邊的圖是我加了椒鹽雜訊,右邊的圖是對它進行了處理,可以看出來效果還是挺好的。
中值濾波VS 均值濾波
如果不是演算法中用到了median filter,恐怕我還不沒有意識到這兩個有聯絡又有區別的概念。中值濾波是median filter,均值濾波是mean filter,二者的用途也很接近,就是把訊號抹平,消除雜訊。不過區別還是有的,後面再說。如果把他們兩個放在一起,看到名字就大概能猜出二者的不同,...
中值濾波與均值濾波
中值濾波法 是一種非線性平滑技術,它將每一畫素點的灰度值設定為該點某鄰域視窗內的所有畫素點灰度值的中值.中值濾波是基於排序統計理論的一種能有效抑制雜訊的非線性訊號處理技術,中值濾波的基本原理是把數字影象或數字序列中一點的值用該點的乙個鄰域中各點值的中值代替,讓周圍的畫素值接近的真實值,從而消除孤立的...
CUDA均值濾波和中值濾波程式設計
主要包括兩部分 主機端 cpu 的呼叫函式和裝置端 gpu 的濾波執行函式。主機端呼叫函式 分配執行緒 分配記憶體還可以對裝置端執行進行計時 裝置端濾波執行函式 是影象進行濾波的執行函式,是整個cuda程式的核心,也叫kernel。主機端呼叫函式 主機端呼叫函式 extern c void runt...