📄 weight_filter.m
字号:
function weight_filter( Image_name,flag,out_filename )
% 用各模板进行去噪和锐化
%输入参数 Image_name 文件名
% flag 模板类型标志1~4
if nargin<3
disp('请按参数格式输入参数!!!');
return;
end
if flag~=1 & flag~=2 & flag~=3 & flag~=4
disp('参数flag输入错误!!!');
return;
end
N=3;
pattern_plate=zeros(N,N); %模板
% 各类模板
if flag==1
pattern_plate=[1/9 1/9 1/9; 1/9 1/9 1/9; 1/9 1/9 1/9];
elseif flag==2
pattern_plate=[1/16 1/8 1/16; 1/8 1/4 1/8; 1/16 1/8 1/16]; % 平滑滤波器
elseif flag==3
pattern_plate=[0 -1 0; -1 5 -1; 0 -1 0]; % 反锐化掩蔽滤波器
elseif flag==4
A=1.7;
pattern_plate=[0 -1 0; -1 A+5 -1; 0 -1 0]; % 高提升滤波器
end
% 读取图像----------
image_I=imread(Image_name);
if isrgb(image_I)
image_I=rgb2gray(image_I);
end
subplot(1,2,1);
imshow(image_I,[]);
title('原图像');
%图像扩展--------------
[size_m,size_n]=size(image_I);
image_ex=zeros(size_m+N-1,size_n+N-1);
%赋值
for row=1:size_m
for col=1:size_n
image_ex(row+(N-1)/2,col+(N-1)/2)=image_I(row,col);
end
end
%对每个象素------------------
temp_plate=zeros(N,N); %模板
image_new=zeros(size_m,size_n); %滤后图像矩阵
for row=1:size_m
for col=1:size_n
%取模板的元素
for row_p=1:N
for col_p=1:N
temp_plate(row_p,col_p)=image_ex(row+row_p-1,col+col_p-1);
end
end
image_new(row,col)=sum(sum(temp_plate.*pattern_plate));
end
end
%输出---------------
subplot(1,2,2);
imshow(uint8(image_new));
title('滤波后图像');
imwrite(uint8(image_new),out_filename);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -