function[y]=tuxiang6_7(x)
[m,n]=size(x);
x=double(x);
y=x;
for i=3:m-2
for j=3:n-2
z1=[x(i-1,j+2),x(i,j+2),x(i+1,j+2),x(i-1,j+1),x(i,j+1),x(i+1,j+1),x(i,j)];
z2=[x(i-1,j-1),x(i,j-1),x(i+1,j-1),x(i-1,j-2),x(i,j-2),x(i+1,j-2),x(i,j)];
z3=[x(i-2,j+1),x(i-1,j+1),x(i-2,j),x(i-1,j),x(i-2,j-1),x(i-1,j-1),x(i,j)];
z4=[x(i+1,j+1),x(i+2,j+1),x(i+1,j),x(i+2,j),x(i+1,j-1),x(i+2,j-1),x(i,j)];
z5=[x(i-2,j+2),x(i-1,j+2),x(i-2,j+1),x(i-1,j+1),x(i,j+1),x(i-1,j),x(i,j)];
z6=[x(i+1,j+2),x(i+2,j+2),x(i,j+1),x(i+1,j+1),x(i+2,j+1),x(i+1,j),x(i,j)];
z7=[x(i-1,j),x(i-2,j-1),x(i-1,j-1),x(i,j-1),x(i-2,j-2),x(i-1,j-2),x(i,j)];
z8=[x(i+1,j),x(i,j-1),x(i+1,j-1),x(i+2,j-1),x(i+1,j-2),x(i+2,j-2),x(i,j)];
z9=[x(i-1,j+1),x(i,j+1),x(i+1,j+1),x(i-1,j-1),x(i,j-1),x(i+1,j-1),x(i-1,j),x(i,j),x(i+1,j)];
z=[z1,z2,z3,z4,z5,z6,z7,z8,z9];
h=[var(z1),var(z2),var(z3),var(z4),var(z5),var(z6),var(z7),var(z8),var(z9)];
%对9个方差进行冒泡排序法
for i1=1:1:8
for j1=1:1:9-i1
if h(1,j1) > h(1,j1+1)
z0=z(1,j1);%z0为临时变量
z(1,j1)=z(1,j1+1);
z(1,j1+1)=z0;
end
end
end
%最小方差已经求出,即h(1,1),对应z(1,1)这个向量,即对应的方差最小的模板
y(i,j)=mean( z(1,1) );%中心像素获得最小方差模板对应的均值
%y(i,j)=median( z(1,1) );%中心像素获得最小方差模板对应的中值
end
end
I=imread('lj.bmp');
I=rgb2gray(I);
[~, f]=size(I);
%J=imnoise(I,'salt & pepper',0.030);
J=imnoise(I,'gaussian',0,0.0002);
%%第一种算法在保持边缘和细节较第二种算法要好很多,当然第一种算法在去噪方面不彻底,不如第二种
l=tuxiang6_7(J);%灰度最小方差的均值滤波器
m=commonfilt2(J,3,3);%自己编写的均或中值滤波方法
subplot(1,2,1),imshow( uint8(l) ),title('灰度最小方差的均值or中值滤波器');
subplot(1,2,2),imshow( uint8(m)),title('普通均值滤波');