数字图像处理:超限邻域平均法(阈值法)

采用超限邻域平均法(阈值法)对被高斯噪声污染的图像(噪声强度均设定为0.05)进行滤波,可使用高斯掩模进行邻域平均(如下所示)。
Matlab程序:(2016a版本)
脚本:test2.m:


1.	% 超限邻域滤波  
2.	clc,clear,close all % 清理命令区、清理工作区、关闭显示图形  
3.	feature jit off % 加速代码运行  
4.	img = imread('hua.jpg');  
5.	img1 = imnoise(img,'gaussian',0.05);%加入噪声密度:0.05的高斯噪声  
6.	img2=rgb2gray(img1);  
7.	img3 = threddmean_filter( img2,5, 5/255 ); % 应用超限邻域滤波  
8.	figure('color',[1,1,1])  
9.	  
10.	subplot(221),imshow(img,[]),title('original image')  
11.	subplot(222),imshow(img1,[]),title('gaussian image')  
12.	subplot(223),imshow(img2,[]),title('灰度图')  
13.	subplot(224),imshow(img3,[]),title('超限邻域滤波效果图')  
可选:效果优化
1.	colormap(jet) % 颜色  
2.	shading interp % 消隐  

函数:threddmean_filter.m:


1.	function Z = threddmean_filter(X,n,thred)  
2.	% 函数对输人图像进行超限邻域平均法滤波  
3.	% 函数输入  
4.	% X:输人二维图像矩阵  
5.	% n:掩膜尺寸  
6.	% thred:阈值  
7.	% 函数输出  
8.	% Z:输出图像矩阵,数据类型与输人相同  
9.	if size(X,3)~=1  
10.	error('图像应该为2维矩阵')  
11.	end  
12.	if ~isa(X,'double')  
13.	X = double(X)/255; % 数据类型  
14.	end  
15.	H = fspecial('average',n); % 均值模板  
16.	Y = imfilter(X, H);  
17.	thre = abs(X-Y)>thred; % 判断哪些是门限  
18.	Z = X; % 赋值  
19.	Z(thre)=Y(thre);  
20.	Z = im2uint8(Z); % 类型转换  
21.	end  
  1. 原始图像、处理后的图像;
    未加颜色效果展示:
    在这里插入图片描述

加颜色效果展示:
在这里插入图片描述

  1. 处理的过程和结果的说明:
    参考资源:网页链接
    查阅资料:该程序主要参考于网站资源,不过在第一次运行的时候出现错误,提示超限邻域滤波函数输入的图像不是二维矩阵,错误分析为没有进行图像灰度处理,使用数据与rgb2gray函数对图像处理后再将结果图输入超限邻域滤波函数即可。
    编程逻辑:
    与前面一个处理方法类似,先对图像进行预处理,编程核心是超限邻域法,通过一个超限邻域滤波函数来完成超限邻域滤波器的功能;
    超限滤波函数思路:
  1. 超限滤波函数有三个输入值图像、掩模、滤波阈值(阈值范围是0-255)
  2. 判断输入图像格式是否正确
  3. 输入图像格式正确后,设定均值模板H
  4. 使用imfilter函数获取输入图像X的像素平均值赋值给Y
  5. 通过abs(X-Y)找出图像中大于阈值thred的点
  6. 将这些点用邻域像素均值替换掉
    邻域平均法的思想是用像素及其指定邻域内像素的平均值或加权平均值作为该像素的新值,以便去除突变的像素点,从而滤除一定的噪声。为了解决邻域平均法造成的图像模糊问题,采用阈值法(又叫做超限邻域平均法,如果某个像素的灰度值大于其邻域像素的平均值,且达到一定水平,判断该像素为噪声,继而用邻域像素的均值取代这一像素值;否则,认为该像素不是噪声点,不予取代。
    分析:当阈值不同时,效果也不同,总是小的噪声先被过滤掉,而大的噪声点需要的阈值减小;当阈值调高时,噪声过滤效果很好,但是同时也损失了原图的部分细节。

猜你喜欢

转载自blog.csdn.net/TianHW103/article/details/127956592
今日推荐