均值滤波,是图像处理中常用的手段,从频率域观点来看均值滤波是一种低通滤波器,高频信号将会去掉。均值滤波可以帮助消除图像尖锐噪声,实现图像平滑,模糊等功能。理想的均值滤波是用每个像素和它周围像素计算出来的平均值替换图像中每个像素。
以3*3均值滤波器为例,均值滤波器算法原理如下图:
二. 用均值滤波器对椒盐噪声污染后的图像去噪
python 源码:
import cv2
import numpy as np
# mean filter
def mean_filter(img, K_size=3):
H, W, C = img.shape
# zero padding
pad = K_size // 2
out = np.zeros((H + pad * 2, W + pad * 2, C), dtype=np.float)
out[pad: pad + H, pad: pad + W] = img.copy().astype(np.float)
tmp = out.copy()
# filtering
for y in range(H):
for x in range(W):
for c in range(C):
out[pad + y, pad + x, c] = np.mean(tmp[y: y + K_size, x: x + K_size, c])
out = out[pad: pad + H, pad: pad + W].astype(np.uint8)
return out
# Read image
img = cv2.imread("../paojie_sp1.jpg")
# Mean Filter
out = mean_filter(img, K_size=5)
# Save result
cv2.imwrite("out.jpg", out)
cv2.imshow("result", out)
cv2.waitKey(0)
cv2.destroyAllWindows()
三. 实验结果:
可以看到,均值滤波后,图像中噪声虽然有所减弱,但是图像变模糊了。因为均值滤波器过滤掉了图像中的高频分量,所以图像的边缘都变模糊了。(去除一定量椒盐噪声,可以考虑使用中值滤波)
四. 参考内容:
https://www.cnblogs.com/wojianxin/p/12501891.html
I=imread('F:\Image.tif') % 读入原始图像J=imnoise(I,'salt &pepper',0.2)% 添加加噪声密度 为 0.2 的椒盐噪声
imwrite(J,'F:\nosie.tif')%把加入噪声的图像保存起来
%%%%%%%%%%%%%%%%去除椒盐噪声
h=[1,1,11,0,11,1,1]% 模板矩阵
h=h/8% 产生滤波归一化的模板
K=conv2(J,h) % 用均值模板对图像滤波,得到去除后的图形K
imwrite(K,'F:\cleanimage.tif')%保存去除后的图像
使用imwrite函数,当利用imwrite函数保存图像时,Matlab缺省的方式是将其简化道uint8的数据格式。比如你的图片在数组H中,要把它保存成图像用inwrite指令:
imwrite(H,'F:\毕业设计\加噪后的图像.jpg')
此语句的意义为:把数组H输出为jpg格式的图片;图片名称:加噪后的图像;保持路径为 F:\毕业设计\。若不写路径,则保存到当前程序所在的文件夹,默认的是MATLAB安装文件夹里的work文件夹。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)