图像去噪基于matlab GUI加权+绝对差分中值滤波图像去噪含Matlab源码 1880期

Posted 海神之光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像去噪基于matlab GUI加权+绝对差分中值滤波图像去噪含Matlab源码 1880期相关的知识,希望对你有一定的参考价值。

一、中值滤波图像去噪简介

图像信号在产生、传输和记录过程中,经常受到各种噪声的干扰,严重地影响图像的视觉效果,因此在进行进一步 的边缘检测、图像分割、特征提取、模式识别等处理之前,采用适当方法尽量减少噪声是一个非常重要的预处理步骤。 目前常使用的噪声滤波器,从整体上可分为线性和非线性滤波两种。在数字信号处理和数字图像处理的早期研究中,线性滤波器是主要处理手段‚它对加性高斯噪声有较好平滑作用。然而当信号中含有非叠加性噪声时‚线性滤波结果很难令人满意。许多实验表明,人类视觉系统是非线性的于是在1958年 Wiener 就提出了非线性滤波理论。特别是1983 年以后,这一领域发展得更加迅速,非线性与统计理论相结合,形成了一个新兴研究领域,在图像处理领域中,目前最常用的图像去噪工具是中值滤波。
1 中值滤波
中值滤波在一维形式下‚是一个奇数个像素的滑动窗 口。经排序后‚窗口序列为 {Fi-v…Fi-1‚Fi‚Fi+1…Fi+v}‚ 其中 V= (L-1) /2‚L 为窗口长度‚Fi 为窗口像素的中值 滤波输出。记作 Med × {·}‚Gi = Med {Fi-v …Fi-1‚Fi‚
Fi+1…Fi+v} 表示取窗口中值。如一窗口长度为5‚像素灰 度分别为 {20‚10‚30‚15‚25}‚Gi=Med {10‚15‚20‚ 25‚30}其灰度级为30的像素为随机脉冲噪声。在经过中 值滤波即被滤除。 一维中值滤波的概念很容易推广到二维。这时取某种形 式的二维窗口‚将窗口内像素排序,生成单调二维中值滤波器,比一维滤波更能抑制噪声。二维中值滤波的窗口形状可以有多种如线状方形、十字形、圆形、菱形等。不同形状的窗口产生不同的滤波效果。使用中要根据图像的内容和 不同的要求加以选择。从经验上看,方形和圆形窗口适宜外 廊线较长的物体图像。十字形窗口则优越于有尖顶物体的图像。因为一维滤波只考虑了图像垂直或水平方向的相关性。 滤波效果不是很明显,所以通常用3×3,5×5的二维中值 滤波。在要求对图像的平滑程度小的情况下,多采用3×3 中值滤波器。 中值滤波能有效抑制脉冲、椒盐噪声。而且一般对图像 边缘也有较好的保护作用。但它对图像中点线等细节模糊作 用也不可忽视:会使宽度小于 (N 为窗口长度) 的边界模糊或消失,随着窗口的增大,滤波作用越大。有效信号损失也 越大。标准中值滤波对所有像素采用统一的处理方法。这种 处理不仅改变了噪声的值,同时也改变了信号点的值‚在滤 波过程中噪声会在邻域内传播。为了克服标准中值滤波存在 的这些问题。最近几年出现了多种基于中值的改进算法‚比 如‚多窗口中值滤波‚加权中值滤波‚自适应中值滤波。
2 自适应加权算法
本文提出一种新的自适应加权方案。充分利用每个窗口元素本身存在的联系,首先对每个窗口元素进行排序‚取适当的坐标比例,进行曲线拟合,拟合后的曲线斜率表征了此 窗口的图像特征。斜率较大的说明窗口中各个元素灰度相差 较大‚可认为具有明显的图像边缘‚进行加权时‚可取排序 后窗口中的几个元素 (如3×3窗口‚取其中3个元素) 进 行加权。这时‚可适当减小中心元素的权重‚而增大两边元 素权重,这样才能保边界和保细节。同理‚斜率较小‚说明 此窗口灰度变化缓慢可直接进行中值滤波,可取一域值以简 化算法复杂性‚提高运算速度。 在加权时‚根据图像各部分特性自适应地选择权重进行加权,这时,方差是个很好的选用标准‚根据图像统计特 性‚按某一函数关系加权到各个元素。且两边元素的权重正 比于方差的大小‚方差大‚两边权重也适当增大。
文章算法如下:
可用可视化软件 matlab 实现
1 对窗口中的元素进行排序;
2 取适当坐标比例进行曲线拟合,并通过matlab函数;
求出拟合线的斜率值
3 当斜率值与其统计平均值差值在指定域值内‚转4‚ 否则转5
4 用窗口的中值代替中心点的值 ;
5 求出该窗口的方差;用关于方差的函数来对窗口序 列中的中间几个元素进行自适应加权。
6 结束本窗口滤波,移至下一窗口。

二、部分源代码

function varargout = MAIN_GUI(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @MAIN_GUI_OpeningFcn, ...
                   'gui_OutputFcn',  @MAIN_GUI_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin1)
    gui_State.gui_Callback = str2func(varargin1);
end

if nargout
    [varargout1:nargout] = gui_mainfcn(gui_State, varargin:);
else
    gui_mainfcn(gui_State, varargin:);
end



% --- Executes just before MAIN_GUI is made visible.
function MAIN_GUI_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);



% --- Outputs from this function are returned to the command line.
function varargout = MAIN_GUI_OutputFcn(hObject, eventdata, handles) 
varargout1 = handles.output;






% --- Executes during object creation, after setting all properties.
function et_PSNR_1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function et_PSNR_2_Callback(hObject, eventdata, handles)



% --- Executes during object creation, after setting all properties.
function et_PSNR_2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function et_PSNR_3_Callback(hObject, eventdata, handles)


% --- Executes during object creation, after setting all properties.
function et_PSNR_3_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on button press in find_imgfile.
function find_imgfile_Callback(hObject, eventdata, handles)                %读取图像按钮
[filename,filepath,filterindex] = uigetfile(...
    '*.jpg','JPEG-files(*.jpg)';...
    '*.bmp;','BMP-files(*.BMP)';...
    '*.tif;','TIF-files(*.tif)';...
    '*.png;','PNG-files(*.png)';...
    '*.gif;','GIF-files(*.gif)';...
    '*.*','All-files(*.*)';...
    ,'Choose Image File','MultiSelect','on');
if isequal(filename,0)%未选择
    setappdata(0,'img_name',[]);
%    set(handles.et_imfile,'string','No Selected File!');
    return;
end
if (isstr(filename))%单个图像
    img_name = [filepath,filename];
%    set(handles.et_imfile,'string',img_name);
    set(handles.ax_original,'visible','on');%设置显示 原图像
    set(handles.txt_original,'visible','on');%设置显示 “原图像”标题
    I = imread(img_name);
    [X,Y,Z]=size(I); 
    %返回图像各维的大小,如果是灰度图象对应的Z=1
    if Z>1
        img=rgb2gray(I);%将RGB的图转化为灰度图
    else
        img=I;
    end
    axes(handles.ax_original);
    imshow(img);
else%多个图像
    filename = sort(filename);
    set(handles.ax_original,'visible','off');
    set(handles.txt_original,'visible','off');
%    set(handles.et_imfile,'string','Multi Image Files!');
end

三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]胡蕾,张伟,覃庆炎.几种图像去噪算法的应用分析[J].信息技术. 2007,(07)
[6]金春花,欧阳晶,王国槟.自适应加权中值滤波图像去噪算法[J].九江职业技术学院学报. 2005,(04)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

以上是关于图像去噪基于matlab GUI加权+绝对差分中值滤波图像去噪含Matlab源码 1880期的主要内容,如果未能解决你的问题,请参考以下文章

图像去噪基于中值+小波+维纳+滤波器图像去噪matlab源码含 GUI

图像去噪基于matlab GUI中值+均值+维纳+小波滤波图像去噪含Matlab源码 753期

图像去噪均值滤波+中值滤波+高斯低通滤波+多种小波变换图像去噪matlab源码GUI

图像去噪基于matlab自适应中值滤波图像去噪含Matlab 1156期

图像去噪基于matlab自适应中值滤波图像去噪含Matlab 1844期

图像去噪基于matlab高斯+均值+中值+双边滤波图像去噪含Matlab源码 1872期