数字图像处理实验(一)(邻域平均法、中值滤波等)
内容摘要
最近,做数字图像处理实验,简单记录一下几个挺有意思的图像处理方法。本篇主要介绍领域平均法和中值滤波法去除图像噪声,求图像SNR和PSNR及其matlab实现代码。
邻域平均法
简单来说,就是对于每一个像素点都取它周围一圈的平均值,来降低一些像素值突变的点(即噪声点)的影响。当然,一个明显的结果就是,图片会一定程度上变模糊,于是有人提出“超限领域平均法”,即如果某个像素的灰度值大于其邻域像素的平均值,且达到一定水平,则判断该像素为噪声,继而用邻域像素的均值取代这一像素值。
代码实现如下,使用方法参见主程序注释。
% 邻域均值法去燥
function Img_average_filter=Average_filter(varargin)
narginchk(1,3);
Img_in = varargin{
1};
Temp = [1 1 1;1 1 1;1 1 1]; % 默认模板
Threshold = 0; % 默认阈值
if nargin == 2
Temp = varargin{
2};
elseif nargin == 3
Temp = varargin{
2};
Threshold = varargin{
3};
end
[n, m] = size(Img_in);
Img_raw = int32(Img_in);
[L1, L2] = size(Temp);
LL=sum(sum(Temp));
Img_average_filter = int32(zeros(n-L1+1, m-L2+1)); % 舍弃边缘信息
for i = (L1+1)/2:n-(L1-1)/2
for j = (L2+1)/2:m-(L2-1)/2
Img_raw_sub = Img_raw(i-(L1-1)/2:i+(L1-1)/2, j-(L2-1)/2:j+(L2-1)/2);
SUM = sum(sum(Img_raw_sub.*int32(Temp)));
ave = SUM/LL;
if Threshold ~= 0
if abs(Img_raw(i,j)-ave) > Threshold
Img_average_filter(i-(L1-1)/2, j-(L2-