Matlab---图像滤波之各种滤波器汇总实现
1 打开图片
所有的滤波原始图片均使用下面的操作方式打开(只处理灰度图像):
% 读取图像 可以处理彩色多通道图片(转化为灰度图像) [FileName,PathName,FilterIndex] = uigetfile({'*.png;*.jpg;*.jpeg';'*.*'},'选择一幅待处理图片');filename = fullfile(PathName, FileName) ; SrcImg = imread(filename); % setappdata(0,'SrcData',SrcImg);% 获取图像的信息 [m n channels] = size(SrcImg); if(channels > 1)% 将彩色图象转为灰度图像SrcImg = rgb2gray(SrcImg);% 将灰度图像数据保存到SrcImg变量中,即后面滤波需要用到的原始数据,此时没有加噪声setappdata(0,'SrcImg',SrcImg);imshow(SrcImg); else% 将灰度图像数据保存到SrcImg变量中,即后面滤波需要用到的原始数据,此时没有加噪声setappdata(0,'SrcImg',SrcImg);imshow(SrcImg); end
2 创建我们需要的噪声
对原始图像进行加噪声处理,即操作SrcImg
:
% 获取原始图像数据SrcImg = getappdata('SrcImg');% 变换f = mat2gray(SrcImg,[0 255]);% 获取图像大小信息[M,N] = size(f);%% 高斯噪声a = 0;b = 0.08;n_gaussian = a + b .* randn(m,n);g_gaussian = f + n_gaussian; % show imagefigure(); imshow(g_gaussian,[0 1]);% 保存图片imwrite(g_gaussian,'gaussianNoise.jpg','jpg');xlabel('Ruselt of Gaussian noise'); %% 瑞利噪声a = -0.2; b = 0.03; n_rayleigh = a + (-b .* log(1 - rand(M,N))).^0.5; g_rayleigh = f + n_rayleigh; % show imagefigure(); imshow(g_rayleigh,[0 1]);imwrite(g_rayleigh,'rayleighNoise.jpg','jpg');xlabel('Ruselt of rayleigh noise'); %% 伽马噪声a = 25; b = 3; n_Erlang = zeros(M,N); for j=1:b n_Erlang = n_Erlang + (-1/a)*log(1 - rand(M,N)); end g_Erlang = f + n_Erlang; % show imagefigure(); imshow(g_Erlang,[0 1]);imwrite(g_Erlang,'erlangNoise.jpg','jpg');xlabel('Ruselt of erlang noise'); %% 均匀噪声a = 0; b = 0.3; n_Uniform = a + (b-a)*rand(M,N); g_Uniform = f + n_Uniform;% show imagefigure(); imshow(g_Uniform,[0 1]);imwrite(g_Uniform,'uniformNoise.jpg','jpg');xlabel('Ruselt of uniform noise'); %% 椒盐噪声a = 0.05; b = 0.05; x = rand(M,N); g_sp = zeros(M,N); g_sp = f; g_sp(find(x<=a)) = 0; g_sp(find(x > a & x<(a+b))) = 1; % show imagefigure(); imshow(g_sp,[0 1]);imwrite(g_sp,'saltNoise.jpg','jpg');xlabel('Ruselt of salt pepper noise');
加噪结果:
原始图像:
椒盐噪声:
高斯噪声:
均匀噪声:
伽马噪声:
瑞利噪声:
3 开始滤波处理(空域和频域)
开始滤波了,通过上面的创建噪声并保存下了各种噪声的图像,接下来要用各种滤波方式将各种噪声降低,显然先要打开各个噪声图像,打开方式同第一节,这里不对各个滤波方式和原理讲解。
低通滤波:f为加噪图像
f = mat2gray(f,[0 255]);[M,N] = size(f);P = 2*M;Q = 2*N;fc = zeros(M,N);for x = 1:1:Mfor y = 1:1:Nfc(x,y) = f(x,y) * (-1)^(x+y);endendF = fft2(fc,P,Q);H_1 = zeros(P,Q);H_2 = zeros(P,Q);for x = (-P/2):1:(P/2)-1for y = (-Q/2):1:(Q/2)-1D = (x^2 + y^2)^(0.5);D_0 = 100;H_1(x+(P/2)+1,y+(Q/2)+1) = 1/(1+(D/D_0)^2); H_2(x+(P/2)+1,y+(Q/2)+1) = 1/(1+(D/D_0)^6);endendG_1 = H_1 .* F;G_2 = H_2 .* F;g_1 = real(ifft2(G_1));g_1 = g_1(1:1:M,1:1:N);g_2 = real(ifft2(G_2));g_2 = g_2(1:1:M,1:1:N); for x = 1:1:Mfor y = 1:1:Ng_1(x,y) = g_1(x,y) * (-1)^(x+y);g_2(x,y) = g_2(x,y) * (-1)^(x+y);endend%% 显示图像figure();imshow(g_2,[0 1]);
高斯平滑:f为加噪图像
f=double(f);f=fft2(f);f=fftshift(f);[m,n]=size(f);d0=80;m1=fix(m/2);n1=fix(n/2);for i=1:mfor j=1:nd=sqrt((i-m1)^2+(j-n1)^2);h(i,j)=exp(-d^2/2/d0^2);endendg=f.*h;g=ifftshift(g);g=ifft2(g);g=mat2gray(real(g));%% 显示图像figure();imshow(g);
自适应中值滤波:f为噪声图像
f = mat2gray(f,[0 255]);[M,N] = size(f);g_sp = f;x = linspace(-0.2,1.2,358);h = hist(g_sp,x)/(M*N);Histogram = zeros(358,1);for y = 1:256Histogram = Histogram + h(:,y);end%% S_max = 7;w = zeros(S_max,S_max);w(round(S_max/2),round(S_max/2)) = 1;g_Ex = imfilter(g_sp,w,'symmetric','full');g_Admf = zeros(M,N);S = 3;for x = 4:M+3for y = 4:N+3% Afor S = 3:2:S_maxS_xy = zeros(S,S);for s = 1:1:Sfor t = 1:1:SS_xy(s,t) = g_Ex(x+s-round(S/2),y+t-round(S/2));endend z_min = min(S_xy(:));z_max = max(S_xy(:));z_med = median(S_xy(:));A_1 = z_med - z_min;A_2 = z_med - z_max;if ((A_1>0)&&(A_2<0)) % B B_1 = g_Ex(x,y) - z_min;B_2 = g_Ex(x,y) - z_max;if((B_1>0)&&(B_2<0)) g_Admf(x-3,y-3) = z_med;break;else g_Admf(x-3,y-3) = z_med; break;end endif(S >= S_max) g_Admf(x-3,y-3) = z_med; break;endend endend%% 显示结果figure();imshow(g_Admf,[0,1]);
维纳滤波:
afterFilter = wiener2(f,[7 7]); figure();imshow(afterFilter);
最大值滤波、中值滤波、最小值滤波:调节参数即可,5相当于中值滤波
afterFilter = ordfilt2(f,5,ones(3,3));figure();imshow(afterFilter); 复合滤波:
```matlabafterFilter1 = ordfilt2(f,5,ones(3,3));h_gaosi1=fspecial('gaussian',3,1);afterFilter2 = imfilter(afterFilter1,h_gaosi1);afterFilter3 = wiener2(afterFilter2,[7 7]);figure();imshow(afterFilter3);
部分结果:
Matlab---图像滤波之各种滤波器汇总实现相关推荐
- matlab soble滤波,MATLAB 图像滤波去噪分析及其应用
MATLAB 图像滤波去噪分析及其应用 第1章 图像颜色空间相互转换与MATLAB实现 1.1 图像颜色空间原理 1.1.1 RGB颜色空间 1.1.2 YCbCr颜色空间 1.1.3 YUV颜色空间 ...
- matlab图像滤波
转自:http://hi.baidu.com/wang%5Fpw/blog/item/36354a637ac87b48eaf8f879.html clc; clear all; I=i ...
- matlab高斯滤波跟中值滤波区别,matlab图像滤波处理代码讲解 均值滤波 中值滤波 高斯滤波...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 (1)均值滤波 function imres = averageFilter(im,N) % imres为均值滤波后的矩阵,参数im为图像的路径,N为滤波 ...
- 【Matlab 图像】滤波器原理使用及测试效果
滤波器使用及测试效果 滤波器1:低通滤波 原理 代码 效果 滤波器2:高斯平滑 原理 代码 效果 滤波器3:自适应中值滤波 原理 代码 效果 滤波器4:维纳滤波 原理 代码 效果 滤波器5:最大值滤波 ...
- 【老生谈算法】matlab实现图像滤波处理算法源码——图像滤波处理算法
matlab图像滤波处理算法详解 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]matlab图像滤波处理.doc 2.算法详 ...
- python图像滤波
python图像滤波 预备知识 滤波器 低通滤波器的主要作用可以消除噪声, 高通滤波器的作用可以提取边缘 核函数 如果我们想要将这两类数据进行分类,那么分类的边界将会是一个椭圆: 但是如果我们可以通过 ...
- Matlab图像处理创新实践-实验2【图像滤波基础(2)】
Matlab图像处理创新实践-实验1[图像滤波基础(1)] Matlab图像处理创新实践-实验2[图像滤波基础(2)] Matlab图像处理创新实践-实验3[图像锐化] Matlab图像处理创新实践- ...
- Matlab图像处理创新实践-实验1【图像滤波基础(1)】
Matlab图像处理创新实践-实验1[图像滤波基础(1)] Matlab图像处理创新实践-实验2[图像滤波基础(2)] Matlab图像处理创新实践-实验3[图像锐化] Matlab图像处理创新实践- ...
- Matlab 频域滤波处理周期噪声图像(带阻滤波器滤波)
带阻滤波器的传递函数为: D0为截止半径(或是截止宽度) D1.D2由下式确定,表示与(u0,v0)和(-u0,v0)点的距离,此时(u0,v0)是在频域中心为坐标原点表示的,所以是对称关系. 使用二 ...
最新文章
- 关于算法的时间复杂度和空间复杂度的总结
- 你可能没看懂Supercell的新游戏
- 第一章 java多线程
- 高性能流媒体服务器EasyDSS前端重构(二) webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间...
- 传播时延、发送时延、处理时延和排队时延各自的物理意义是什么?
- js隐藏和显示div
- BERT源码分析(二)
- 2010.11.13网规论文关注点
- 学成在线官网首页完整版(含psd源文件)
- Open_source_tools
- 那些年我们感到不可思议的数据恢复
- Linux复制文件到某路径并重命名
- 2007年日历带农历表_2007年农历阳历表 2007年农历表 2007年日历表
- centos xfs硬盘扩容
- python发行版是什么意思_致 Python 初学者
- Proteus仿真-步进电机
- 新款「超大杯」iPhone遭爆料!不止大镜头,还有1TB储存,但却不能叫iPhone13
- 幅相曲线渐近线_开环幅相曲线绘制.ppt
- 【Tyvj1922】Freda的迷宫
- 非常详细的详谈struct sk_buff
热门文章
- 小程序原生 详解实现腾讯地图标点和路线规划和距离计算
- WEIXIN day_04(8.19)小程序的事件处理、传参、常用API、生命周期、网络通信
- 男人们实用的:电脑族的护肤秘籍
- CrashPad在Windows下的使用
- 科幻字体_您可以免费获得40种科幻字体
- 山村婆婆说的十大忌[必看!]
- Vue中export和export default的区别和用法
- VS2019如何关闭逗号句号等符号的自动代码补全(C/C++)
- R实现K均值算法,层次聚类算法与DBSCAN算法
- uniapp 电商app进度条组件的使用(砍价进度条处理)