十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
方法一:filter2
成都创新互联公司专注于成都企业网站建设,响应式网站设计,商城开发。成都网站建设公司,为成都等地区提供建站服务。全流程按需策划,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务
clear all;
I=imread('lena.bmp');
%读入预处理图像
imshow(I)
%显示预处理图像
K1=filter2(fspecial('average',3),I)/255;
%进行3*3均值滤波
K2=filter2(fspecial('average',5),I)/255;
%进行5*5均值滤波
K3=filter2(fspecial('average',7),I)/255;
%进行7*7均值滤波
figure,imshow(K1)
figure,imshow(K2)
figure,imshow(K3)
方法二:双循环语句,移动平均法
%均值滤波
clc,clear;
f=imread('lena.bmp');
subplot(121),imshow(f),title('原图');
f1=imnoise(f,'gaussian',0.002,0.0008);
%subplot(222),imshow(f1),title('添加高斯噪声图');
k1=floor(3/2)+1;
k2=floor(3/2)+1;
X=f1;
[M,N]=size(X);
uint8 Y=zeros(M,N);
funBox=zeros(3,3);
for i=1:M-3
for j=1:N-3
funBox=X(i:i+3,j:j+3);
s=sum(funBox(:));
h=s/9;
Y(i+k1,j+k2)=h;
end;
end;
Y=Y/255;
subplot(122),imshow(Y),title('均值滤波');
实现图:
一. 均值滤波简介和原理
均值滤波,是图像处理中常用的手段,从频率域观点来看均值滤波是一种低通滤波器,高频信号将会去掉。均值滤波可以帮助消除图像尖锐噪声,实现图像平滑,模糊等功能。理想的均值滤波是用每个像素和它周围像素计算出来的平均值替换图像中每个像素。
以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()
三. 实验结果:
可以看到,均值滤波后,图像中噪声虽然有所减弱,但是图像变模糊了。因为均值滤波器过滤掉了图像中的高频分量,所以图像的边缘都变模糊了。(去除一定量椒盐噪声,可以考虑使用中值滤波)
四. 参考内容:
中值滤波楼上答了,5*5的均值滤波代码 w2=fspecial('average',[5 5]); %% 先定义一个滤波器 h=imfilter(a,w2,'replicate'); %%让图像通过滤波器 imshow(h); imwrite(h,'8.jpg');
均值滤波是
I=medfilt2(a,[3 3],'symmetric')
可以在matlab中查询medfilt函数的用法,本例是使用3*3的滤波器采用镜像边界法做均值滤波。
应该另外开辟一个空间保存新计算的图像像素值,你这样是把前面计算好的中值或者均值算到它临近点的3*3区域里了,这样的效果应该是图像从左上到右下越来越白或者越来越黑。
对于椒盐噪声,中值滤波的效果好;对于高斯噪声,均值滤波的效果好。
rgb=imread('flower.jpg');
fR=rgb(:,:,1);
fG=rgb(:,:,2);
fB=rgb(:,:,3);
w=fspecial('average');
fR_filtered=imfilter(fR,w);
fG_filtered=imfilter(fG,w);
fB_filtered=imfilter(fB,w);
rgb_filtered=cat(3,fR_filtered,fG_filtered,fB_filtered);
1:smoothingAverageFilterMain.mclc;clear;fid = fopen('lenai.raw');temp= fread(fid, [256,256]);LenaRaw=uint8(temp');subplot(1,2,1) Imshow(LenaRaw);title('原始图像')subplot(1,2,2) Imshow(smoothingAverageFilter(LenaRaw,3));title('自制函数,使用用3*3模板,均值滤波图像')2:smoothingAverageFilter.mfunction returnData=smoothingAverageFilter(arg,arg2)[Iwidth,Ilength]=size(arg);temp=double(arg);returnData=zeros(Iwidth,Ilength);totalLength=arg2*arg2;for i=1:Iwidth-arg2+1 for j=1:Ilength-arg2+1 % temp(i,j)=average(arg(i:i+arg2,j:j+arg2)); sum=0.0; for n=1:arg2 for k=1:arg2 sum=sum+temp(i+n-1,j+k-1); end end returnData(i,j)=sum/totalLength; endendreturnData=uint8(returnData);end