【数字图像处理笔记】Matlab实现图像平滑算法 均值-中值-高斯滤波 (三)
-
💌 所属专栏:【数字图像处理笔记】
-
😀 作 者:我是夜阑的狗🐶
-
🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询!
-
💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘
您的点赞、关注、收藏、评论,是对我最大的激励和支持!!!🤩 🤩 🤩
文章目录
- 前言
- 一、原理
- 二、实现过程
- 1、中值滤波
- 2、均值滤波
- 3、高斯滤波
- 总结
前言
大家好,又见面了,我是夜阑的狗🐶,本文是专栏【数字图像处理笔记】专栏的第3篇文章;
这是今天学习到数字图像处理笔记 – Matlab实现图像平滑算法 均值-中值-高斯滤波 💖💖💖,开启新的征程,记录最美好的时刻🎉,每天进步一点点。
专栏地址:【数字图像处理笔记】 , 此专栏是我是夜阑的狗对数字图像处理学习过程的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
一、原理
图像平滑的主要目的就是去除或衰减图像上的噪声和假轮廓,即衰减高频分量,增强低频分量,或称低通滤波。由前面的介绍可以得知,图像平滑处理在消除或减弱图像噪声和假轮廓的同时,对图像细节也有一定的衰减作用。
因此,图像平滑的直观效果是图像噪声和假轮廓得以去除或衰减,但同时图像将变得比处理前模糊了,模糊的程度要看对高频成份的衰减程度而定。就同一种平滑方法而言,去除或衰减噪声和假轮廓的效果越好,图像就越模糊,因而图像细节损失越多。因此,在对图像作平滑处理的过程中,要二者兼顾。
二、实现过程
1、中值滤波
代码:
g = medfilt2(P1); %对高斯躁声中值滤波 subplot(3,4,5),imshow(g); title('medfilter gaussian'); h = medfilt2(P2); %对椒盐躁声中值滤波 subplot(3,4,6),imshow(h); title('medfilter salt & pepper noise');
medfilt2 中值滤波函数源码分析:
function b = medfilt2(varargin) args = matlab.images.internal.stringToChar(varargin); %解析输入参数 %a为待滤波图像,mn向量为滤波模板,padopt为边缘处理选项 [a, mn, padopt] = parse_inputs(args{:}); domain = ones(mn); %大小为m*n的全1矩阵 if (rem(prod(mn), 2) == 1) %取模判断mn滤波模板个数是否为奇数个 tf = hUseIPPL(a, mn, padopt); %padopt是否设置为“symmetric”模式 if tf b = medianfiltermex(a, [mn(1) mn(2)]); else %取出mn矩阵中位数对应的下标order order = (prod(mn)+1)/2; %对图像A作顺序统计滤波,A为输入图像矩阵,padopt为边界处理方式 %输出第order个数作为中值滤波的结果 b = ordfilt2(a, order, domain, padopt); end else %mn滤波模板个数为偶数个 order1 = prod(mn)/2;%最中间靠左序号 order2 = order1+1;%最中间靠右序号 %对图像A作顺序统计滤波,A为输入图像矩阵,padopt为边界处理方式 %输出第order个数作为中值滤波的结果 b = ordfilt2(a, order1, domain, padopt); b2 = ordfilt2(a, order2, domain, padopt); if islogical(b) %判断b类型是否合法 b = b | b2; else b = imlincomb(0.5, b, 0.5, b2); %取出平均中间值 end end
2、均值滤波
代码:
a=[1 1 1 %对高斯躁声算术均值滤波 1 1 1 1 1 1]; l=1/9*a; k = conv2(double(P1),double(l)); subplot(3,4,7),imshow(k,[]); title('arithmeticfilter gaussian'); d = conv2(double(P2),double(l)); %对椒盐躁声算术均值滤波 subplot(3,4,8),imshow(d,[]); title('arithmeticfilter salt & pepper noise'
3、高斯滤波
代码:
sigma=8;% 标准差大小 window=double(uint8(3*sigma)*2+1);% 窗口大小一半为3*sigma H=fspecial('gaussian', window, sigma);% fspecial('gaussian', hsize, sigma)产生滤波模板 img_gauss=imfilter(P1,H,'replicate'); %为了不出现黑边,使用参数'replicate'(输入图 像的外部边界通过复制内部边界的值来扩展) subplot(3,4,9), imshow(img_gauss); title('gaussian filting gauss noise'); img_salt=imfilter(P2,H,'replicate'); subplot(3,4,10), imshow(img_salt); title('gaussian filting salt pepper noise');
fspecial 高斯滤波函数源码分析:
function h = fspecial(varargin) [type, p2, p3] = ParseInputs(varargin{:});%解析输入参数 switch type:%当参数type为'gaussian'高斯滤波时 case 'gaussian' % Gaussian filter % p2为模板大小,以[m n]形式定义,p3为标准差 siz = (p2-1)/2; %siz为最大行列序号 std = p3;%赋值标准差 %基于siz,std,调用meshgrid函数生成mn模板每个位置的权值 [x,y] = meshgrid(-siz(2):siz(2),-siz(1):siz(1)); % 二维高斯分布中e对应的指数 arg = -(x.*x + y.*y)/(2*std*std); h = exp(arg); h(h:}); [finalSize, pad] = computeSizes(a, h, sameSize); if (isSeparable(a, h)&& (numel(size(a))'double','single','uint32','int8'}) && ismatrix(h) && numel(size(a))==3 % 3D image , 2D kernel - stack behavior b = imagesbuiltinImfilter(a, h, boundary, outputShape, do_fcn); else % 根据滤波器核的尺寸输入Pad a = padImage(a,pad,boundary); b = filterPartOrWhole(a, finalSize, h, pad, sameSize, convMode); end end
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理!
部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!
图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!