c=x1(i:i+2,j:j+2); %取出x1中从(i,j)开始的3行3列元素,即模板(3×3的)
e=[c(1,:),c(2,:),c(3,:)] ; %将c矩阵变为一个行矩阵
mm=median(e) ; %mm是中值
x2(i+1,j+1)=mm; %将模板各元素的中值赋给模板中心位置的元素
end
end
d=uint8(x2);
end
%加权均值函数
function d = average_filter( picture ,a)
[hight, width]=size(picture);
x1=double(picture); x2=x1;
a_sum=sum(sum(a))
for i=1:hight-2 %最后一列不用计算
for j=1:width-2 %最后一行不用计算
c=x1(i:i+2,j:j+2).*a;%取出 x1 中从(i,j)开始的 n 行 n 列元素与模板相乘
s=sum(sum(c)); %求 c 矩阵中各元素之和
x2(i+1,j+1)=s/a_sum; %将与模板运算后的各元素的均值赋给模板中心位置的元
素
end
end
%为被赋值的元素取原值
d=uint8(x2);
end
%Sobel 锐化函数
function result = sharpen_filter(picture )
dx=[-1 0 1;-2 0 2;-1 0 1];
dy=[-1 -2 -1;0 0 0 ;1 2 1];
[height, width]=size(picture);
x1=double(picture);
x2=x1;
for i=1:height-2%最后一列不用计算
for j=1:width-2%最后一行不用计算
c=x1(i:i+2,j:j+2).*dx;%取出 x1 中从(i,j)开始的 n 行 n 列元素与模板相乘
c=sum(sum(c)); %求 c 矩阵中各元素之和
if c>255
c=255;
end
评论0
最新资源