高斯模板(高斯滤波)的实现matlab版

您所在的位置:网站首页 创建一个自定义函数处理图像中的椒盐噪声 高斯模板(高斯滤波)的实现matlab版

高斯模板(高斯滤波)的实现matlab版

2024-06-17 07:52:25| 来源: 网络整理| 查看: 265

高斯模板(高斯滤波)的实现 (一)目标(二)前言(三)相关知识1.高斯函数的定义2.高斯滤波原理3.高斯模板公式4.模板与图像滤波的实现(实质:卷积) (四)不同方法实现高斯模板的区别(五)实现过程与结果1.方法12.方法23.方法3 参考文献

(一)目标

生成一个(2N+1)×(2N+1)大小的高斯模板H(标准为sigma),然后用此模板对图像进行滤波。 具体要求 在这里插入图片描述 注:这里采用了多种方法: 方法一:自己编写高斯模板,并用 imfilter等函数。 方法二:自己编写高斯模板,不能用imfilter等函数。 方法三:利用matlab中的 fspecial 来产生高斯模板。

(二)前言

为什么要讨论上述方法呢? 通过编程显示便可知道方法的不同产生的高斯函数会略有不同。编程前,我们首先应该了解一下高斯函数及高斯滤波。

(三)相关知识 1.高斯函数的定义

在这里插入图片描述在这里插入图片描述 根据一维高斯函数,可以推导得到二维高斯函数: 在这里插入图片描述 参考博文:高斯函数以及在图像处理中的应用总结

2.高斯滤波原理

高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

3.高斯模板公式

二维高斯模板可以通过矩阵M来实现,假设模板的大小为(2k+1, 2k+1), 其中k为模板中心,则M(i,j)的值如下所示: 在这里插入图片描述

4.模板与图像滤波的实现(实质:卷积)

在这里插入图片描述 其中,w表示高斯算子,a,b表示算子大小。

(四)不同方法实现高斯模板的区别

这里先放结果,代码部分见方法一 由于不同标准差会造成不同效果,编程代码见附录2,这里显示我以0.5:0.5:4.5的sigma来设计不同的15*15高斯低通模板显示不同高斯模板之间的区别,如下所示: 在这里插入图片描述

下面为我根据高斯函数表达书编写的高斯模板三维显示图: 在这里插入图片描述 Matlab中自带高斯模板函数,显示如下: 在这里插入图片描述 由上述可知,sigma越小,函数越窄越高,与前述的理论不同。高斯模板与自己编写的区别主要是在模板中心值的不同,中心像素值的不同会导致周围的值也有所不同,运行方法一中代码你就知道了,这里我就不放了。

(五)实现过程与结果 1.方法1

实验结果如下所示: 自己编写的滤波效果: 在这里插入图片描述 matlab自带 在这里插入图片描述 对比如下:(左边自己,后边matlab) 在这里插入图片描述 实验代码:

%% 文件说明 % 第三章数字图像处理作业第2次作业第2题做法1 % 要求:实现15*15的高斯低通模板 % 做法1:显示不同高斯模板区别并且与matlab中的高斯函数进行对比 N_size = 15; % size模板长度,假设模板为15*15,则size为15 %% 第一种方法:自己编码 center_N = (N_size + 1)/2; %模板中心位置,这里假设模板长度为奇数 N_row = N_size; N_col = N_size; array_sigma = 0.5:0.5:4.5; %标准差数组,对模板的影响很大 Map_X = 1:N_row; Map_Y = 1:N_col; % 作3维图的横坐标 %% 绘制不同15*15高斯模板 % 高斯函数的实现 figure('Name', '不同高斯模板三维图') for k =1:9 sigma = array_sigma(k); for i=1 : N_row for j=1 : N_col distance_s = double((i-center_N-1)^2 + (j-center_N-1)^2); G_ry(i,j)=exp((-1) * distance_s/(2*sigma^2))/(2*pi*(sigma^2)); end end % 这里以小数显示,显示整数模板可参考C = floor(G_ry.*(1/G_ry(1,1))) disp(num2str(sigma));disp(G_ry) subplot(3,3,k);surf(Map_X,Map_Y,G_ry);title(num2str(sigma)); end %% 绘制不同matlab的高斯函数 figure('Name', 'matlab不同高斯模板三维图') for k =1:9 sigma = array_sigma(k); gausFilter = fspecial('gaussian',[N_row N_col],sigma); % 这里以小数显示,显示整数模板可参考C = floor(G_ry.*(1/G_ry(1,1))) disp(num2str(sigma));disp(gausFilter) subplot(3,3,k);surf(Map_X,Map_Y,G_ry);title(num2str(sigma)); end %% 编程的高斯模板处理前后对比图 figure('Name', '不同高斯模板滤波效果(my)') srcImg = imread('pic_3_x2.jpg'); subplot(3,4,1);imshow(uint8(srcImg));title('原图'); grayImg = rgb2gray(srcImg); subplot(3,4,5);imshow(uint8(grayImg));title('灰度图'); Image_noise = imnoise(grayImg,'gaussian'); %加噪 subplot(3,4,9);imshow(uint8(Image_noise));title('加噪图'); for k =1:9 sigma = array_sigma(k); for i=1 : N_row for j=1 : N_col distance_s = double((i-center_N-1)^2 + (j-center_N-1)^2); G_ry(i,j)=exp((-1) * distance_s/(2*sigma^2))/(2*pi*(sigma^2)); end end subplot(3,4,k+ ceil(k/3)); Gry_Img = imfilter(Image_noise,G_ry); imshow(Gry_Img);title(num2str(sigma)); end %% 制不同15*15高斯滤波效果 figure('Name', '不同高斯模板滤波效果(matlab)') subplot(3,4,1);imshow(uint8(srcImg));title('原图'); subplot(3,4,5);imshow(uint8(grayImg));title('灰度图'); subplot(3,4,9);imshow(uint8(Image_noise));title('加噪图'); for k =1:9 sigma = array_sigma(k); gausFilter = fspecial('gaussian',[N_row N_col],sigma); subplot(3,4,k+ ceil(k/3)); Gry_Img = imfilter(Image_noise,gausFilter); imshow(Gry_Img);title(num2str(sigma)); end 2.方法2

实验结果如下: 在这里插入图片描述 实验代码:

%% 文件说明 % 第三章数字图像处理作业第2次作业第2题做法2 % 要求:实现15*15的高斯低通模板 % 做法2:处理对比,不做边缘的高斯滤波滤波 %% % 读取图像并作灰度化处理 srcImg=imread('pic_3_x2.jpg'); grayImg=rgb2gray(uint8(srcImg)); k = size(grayImg); [grayImg_row,grayImg_col]=size(grayImg); % 实现高斯模板参数设置 sigma = 1.6; %sigma标准差 N = 7; %模板大小为(2N+1)×(2N+1)= 15*15 N_row = 2*N+1; N_col = 2*N+1; % 对图像进行加噪处理 Image_noise = imnoise(grayImg,'gaussian'); %加噪 %% 使用按照高斯公式写的高斯滤波模板 G_ry = []; % 根据高斯函数写的模板 for i=1:N_row for j=1:N_col distance_s=double((i-N-1)^2+(j-N-1)^2);%像素距离 G_ry(i,j)=exp(-distance_s/(2*sigma*sigma))/(2*pi*sigma*sigma);%高斯函数 end end G_ry=G_ry/sum(G_ry(:));%归一化 dstImg_Gry = zeros(grayImg_row,grayImg_col); % 滤波后图像,大小与滤波前相同 for i=1:grayImg_row for j=1:grayImg_col dstImg_Gry(i,j)=Image_noise(i,j); end end temp=[];%滤波像素值 for ai=N+1:grayImg_row-N-1 for aj=N+1:grayImg_col-N-1 temp=0; for bi=1:N_row for bj=1:N_col % 注:这里是不对边界处理的滤波 temp= temp+(dstImg_Gry(ai+bi-N-1,aj+bj-N-1)*G_ry(bi,bj)); end end dstImg_Gry(ai,aj)=temp; end end % 滤波后的图像 dstImg_Gry=uint8(dstImg_Gry); %% 使用matlab自带函数 gausFilter = fspecial('gaussian',[N_row N_col],sigma); GmF_Img=imfilter(Image_noise,gausFilter,'conv');%滤波后的图像 %% 显示滤波结果 figure('Name','不处理边界的高斯滤波对比') subplot(2,2,1);imshow(grayImg);title('原图'); subplot(2,2,2);imshow(Image_noise);title('噪声图'); subplot(2,2,3);imshow(dstImg_Gry);title('my高斯滤波'); subplot(2,2,4);imshow(GmF_Img);title('matlab高斯滤波');

方法2和方法3可参考matlab实现图像滤波——高斯滤波【这篇博文】

3.方法3

实验结果: 在这里插入图片描述 实验代码:

%% 文件说明 % 第三章数字图像处理作业第2次作业第2题做法3 % 要求:实现15*15的高斯低通模板 % 做法3:处理对比,边界扩充的高斯滤波滤波 %% % 读取图像并作灰度化处理 srcImg=imread('pic_3_x2.jpg'); grayImg=rgb2gray(uint8(srcImg)); [grayImg_row,grayImg_col]=size(grayImg); % 实现高斯模板参数设置 sigma = 1.6; %sigma标准差 N = 7; %模板大小为(2N+1)×(2N+1)= 15*15 N_row = 2*N+1; N_col = 2*N+1; % 对图像进行加噪处理 Image_noise = imnoise(grayImg,'gaussian'); %加噪 %% 使用按照高斯公式写的高斯滤波模板 G_ry = []; % 根据高斯函数写的模板 for i=1:N_row for j=1:N_col distance_s=double((i-N-1)^2+(j-N-1)^2);%像素距离 G_ry(i,j)=exp(-distance_s/(2*sigma*sigma))/(2*pi*sigma*sigma);%高斯函数 end end G_ry=G_ry/sum(G_ry(:));%归一化 dstImg_Gry = zeros(grayImg_row,grayImg_col); % 滤波后图像,大小与滤波前相同 midImg=zeros(grayImg_row+2*N,grayImg_col+2*N); %滤波中间图像 for i=1:grayImg_row for j=1:grayImg_col midImg(i+N,j+N)=Image_noise(i,j);%原图像赋值给中间图像,四周边缘设置为0 end end dstImg_ry=zeros(grayImg_row,grayImg_col); %滤波后图像 temp=[];%滤波像素值 for ai=N+1:grayImg_row+N for aj=N+1:grayImg_col+N temp_row=ai-N; temp_col=aj-N; temp=0; for bi=1:N_row for bj=1:N_row temp= temp+(midImg(temp_row+bi-1,temp_col+bj-1)*G_ry(bi,bj)); end end dstImg_ry(temp_row,temp_col)=temp; end end dstImg_ry=uint8(dstImg_ry); %% 使用matlab自带函数 gausFilter = fspecial('gaussian',[N_row N_col],sigma); GmF_Img=imfilter(Image_noise,gausFilter,'conv');%滤波后的图像 %% 显示结果 figure('Name','高斯滤波对比') subplot(2,2,1);imshow(grayImg);title('原图'); subplot(2,2,2);imshow(Image_noise);title('噪声图'); subplot(2,2,3);imshow(dstImg_ry);title('my高斯滤波'); subplot(2,2,4);imshow(GmF_Img);title('matlab高斯滤波'); 参考文献 高斯函数以及在图像处理中的应用总结 :https://www.cnblogs.com/herenzhiming/articles/5276106.htmlmatlab实现图像滤波——高斯滤波:https://blog.csdn.net/ytang_/article/details/52749497


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭