|
- function Z = threddmean_filter(X,n,thred)
- % 函数对输人图像进行超限邻域平均法滤波
- % 函数输入
- % X:输人二维图像矩阵
- % n:掩膜尺寸
- % thred:阈值
- % 函数输出
- % Z:输出图像矩阵,数据类型与输人相同
- if size(X,3)~=1
- error('图像应该为2维矩阵')
- end
- if ~isa(X,'double')
- X = double(X)/255; % 数据类型
- end
- H = fspecial('average',n); % 均值模板
- Y = imfilter(X, H);
- thre = abs(X-Y)>thred; % 判断哪些是门限
- Z = X; % 赋值
- Z(thre)=Y(thre);
- Z = im2uint8(Z); % 类型转换
- end
复制代码 主程序:
- % 超限邻域滤波器
- clc,clear,close all % 清理命令区、清理工作区、关闭显示图形
- warning off % 消除警告
- feature jit off % 加速代码运行
- [filename ,pathname]=...
- uigetfile({'*.bmp';'*.jpg';},'选择图片'); % 选择图片路径
- str = [pathname filename]; % 合成路径+文件名
- im = imread(str); % 原图像
- im = imnoise(im,'gaussian',0,1e-3); % 原图像 + 白噪声
- im1 = threddmean_filter( im,5, 5/255 ); % 应用超限邻域滤波
- figure('color',[1,1,1])
- subplot(121),imshow(im,[]),title('original image')
- colormap(jet) % 颜色
- shading interp % 消隐
- subplot(122),imshow(im1,[]),title('超限邻域滤波')
- colormap(jet) % 颜色
- shading interp % 消隐
复制代码
|
|