滤波与锐化

来源:互联网 发布:三菱plc编程入门 编辑:程序博客网 时间:2024/05/01 18:19

1 均值滤波matlab实现

clearclcx=[1 2 2 2 3   1 15 1 2 2   2 1 2 0 3   0 2 2 3 1   3 2 0 2 2]; n=3; %模板大小a=ones(n,n)./(n*n);   %a即n×n模板,元素全是1[height, width]=size(x);   %输入图像是hight*width的,且hight>n,width>nx1=double(x);%由于像素值是整数,在计算前先将其转换为浮点数。result=x1; % 先预置结果,再再在下面对结果进行修改for i=1:height-n+1    for j=1:width-n+1        c=x1(i:i+(n-1),j:j+(n-1)).*a; %取出x1中从(i,j)开始的n行n列元素与模板相乘        s=sum(sum(c));                 %求c矩阵中各元素之和        result(i+(n-1)/2,j+(n-1)/2)=s; %将与模板运算后的各元素的均值赋给模板中心位置的元素    endend%未被赋值的元素取原值result=uint8(result);

2 中值滤波matlab实现

clearclcx=[1 2 2 2 3   1 15 1 2 2   2 1 2 0 3   0 2 2 3 1   3 2 0 2 2];n=3; %窗口大小[height, width]=size(x);   %输入图像是p×q的,且p>n,q>nx1=double(x);%由于像素值是整数,在计算前先将其转换为浮点数。result=x1;% 先预置结果,再再在下面对结果进行修改for i=1:height-n+1    for j=1:height-n+1        c=x1(i:i+(n-1),j:j+(n-1)); %取出x1中从(i,j)开始的n行n列元素,即模板(n×n的)        e=c(1,:);      %是c矩阵的第一行        for u=2:n      %再将c的2~n行都取出来                 e=[e,c(u,:)];     %将c矩阵变为一个行矩阵            end        mm=median(e);      %mm是中值        result(i+(n-1)/2,j+(n-1)/2)=mm;   %将模板各元素的中值赋给模板中心位置的元素    endend %未被赋值的元素取原值result=uint8(result);

参考资料

[1]《数字图像处理与分析》_第2版_北京航空航天大学出版社

[2]均值滤波、中值滤波的matlab实现

0 0