相关文章推荐
稳重的企鹅  ·  省发展改革委关于印发《长三角生态绿色一体化发 ...·  2 天前    · 
没有腹肌的黑框眼镜  ·  教育培训广告应注意哪些_北京市市场监督管理局·  1 周前    · 
健壮的鸵鸟  ·  关于公布2022年杭州市区各类高中学校特长生 ...·  10 月前    · 
踢足球的小熊猫  ·  中国男篮--体育--人民网·  1 年前    · 
天涯  ·  国内首个类 ChatGPT 模型:复旦大学 ...·  1 年前    · 
Code  ›  MATLAB-高斯滤波的实现-阿里云开发者社区
阿里 matlab 高斯滤波 高斯
https://developer.aliyun.com/article/1050511
傻傻的键盘
1 年前
产品 解决方案 文档与社区 免费试用 定价 云市场 合作伙伴 支持与服务 了解阿里云
备案 控制台 登录/注册
开发者社区
首页
探索云世界
新手上云 云上应用构建 云上数据管理 云上探索人工智能
云计算 弹性计算 无影 存储 网络 倚天
云原生 容器 serverless 中间件 微服务 可观测 消息队列
数据库 关系型数据库 NoSQL数据库 数据仓库 数据管理工具 PolarDB开源 向量数据库

热门

Modelscope模型即服务 弹性计算 云原生 数据库 物联网 云效DevOps 龙蜥操作系统 平头哥 钉钉开放平台
大数据 大数据计算 实时数仓Hologres 实时计算Flink E-MapReduce DataWorks Elasticsearch 机器学习平台PAI 智能搜索推荐
人工智能 机器学习平台PAI 视觉智能开放平台 智能语音交互 自然语言处理 多模态模型 pythonsdk 通用模型
开发与运维 云效DevOps 钉钉宜搭 支持服务 镜像站 码上公益
问产品
动手实践
考认证
TIANCHI大赛
活动广场
任务中心 飞天Club技术沙龙 训练营 话题 开发者评测 乘风者计划 阿里云MVP 直播
下载
镜像站 技术资料 插件
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

1、内容概要


高斯滤波 是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤 波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

一位 高斯分布 :


image.png

二位高斯分布:


image.png

高斯滤波后图像被平滑的程度取决于标准差。它的输出是临域 像素 的加权平均,同时离中心越近的像素权重越高。因此,相对于均值滤波(mean filter)它的平滑效果更柔和,而且边缘保留的也更好。高斯滤波被 用作为平滑滤波器的本质原因是因为它是一个低通滤波器,而且大部份基于卷积平滑滤波器都是低通滤波器。GAUSS 滤波算法克服了边界效应,因而滤波后的图像较好。

2.  高斯滤波算法实现步骤


image.png

image.png

1>串行像素形成 3x3 矩阵

(x-1,y-1)  (x,y-1)  (x+1,y-1)

(x-1,y)       (x,y)     (x+1,y)

(x-1,y+1) (x,y+1)  (x+1,y+1)

f(x,y)表示(x,y)点的像素值;

g(x,y)表示(x,y)点经过高斯滤波处理后的值;

2>用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值

g(x,y)=(1/16)* (f(x-1,y-1)+2f(x,y-1)+f(x+1,y-1)

+2f(x-1,y)+4f(x,y) + 2f(x+1,y)+

f(x-1,y+1)+2f(x,y+1)+f(x+1,y+1))------------------------------(1)

3> 用模板扫描图像中的每一个像素

image.png

如图 1 所示,使用高斯滤波模板从屏幕的左上角(从左到右),没扫完一行

换下一行(从上到下)扫完整个屏幕,最终完成一帧图的高斯滤波。

本文来自知识星球(FPGA自习学院)

matlab 代码的实现:

M=imread('go.jpg'); %读取图像
[ROW,COL, DIM] = size(M);%保存图像尺寸
subplot(3,3,1),imshow(M),title('original');%显示原始图像
P1=imnoise(M,'gaussian',0.05); %加入高斯躁声
subplot(3,3,2),imshow(P1),title('gaussian noise');%加入高斯躁声后显示图像
P1=im2double(P1);
guss_filter_img=P1;
for r = 2:1:ROW-1
    for




    
 c = 2:1:COL-1
        for d =1:3
        guss_filter_img(r,c,d) =(P1(r-1, c-1,d) + P1(r-1, c,d)*2 + P1(r-1, c+1,d) +...
        P1(r, c-1,d)*2 + P1(r, c,d)*4 + P1(r, c+1,d)*2+...
        P1(r+1, c-1,d) + P1(r+1, c,d)*2 + P1




    
(r+1, c+1,d))/ 16;
subplot(3,3,3),imshow(guss_filter_img),title('guss_img');

简单的利用了3X3的算子实现了对高斯噪声的过滤功能

在这里简要说明下为什么要进行操作

1. P1=im2double(P1);
2. guss_filter_img=P1;

因为开始的图片是uint8类型的,进行运算后会出现小数,这是的运算结果将是错误的,(我试了好多次,在工作区看到了类型的区别,不进行转换将会显示

下图是只使用

guss_filter_img=P1;

image.png

使用这两行代码:

1. guss_filter_img=P1;
2. guss_filter_img=im2double(guss_filter_img);

此时对应的工作区数值

double类型的

image.png

为了节省存储空间,matlab为图像提供了特殊的数据类型uint8(8位的无符号整数),以此方式存储的图像称作8位图像。

imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位的RGB中。

因此,matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算,

I2=imdouble(I1); %把图像I1转换成double精度类型 (假设图形矩阵范围0~255)

或者I64=double(I8)/255; %uint转换成double如果不转换,计算会产生溢出。

虽然matlab中读入图像的数据类型是uint8,而在图像矩阵运算的时候,使用的数据类型却是double类型。一是为了保证精度,二是因为如果不转换,在对uint8进行加减时会产生溢出,可能提示的错误为:

Function ‘*’ is not defined for values of class ‘uint8’

1个字节无符号整型最大只能存储数据为255,对图片的操作所以很容易溢出。

这里其实也体现了图像归一化的操作。

效果截图

image.png

 
推荐文章
稳重的企鹅  ·  省发展改革委关于印发《长三角生态绿色一体化发展示范区嘉善片区发展规划》的通知
2 天前
没有腹肌的黑框眼镜  ·  教育培训广告应注意哪些_北京市市场监督管理局
1 周前
健壮的鸵鸟  ·  关于公布2022年杭州市区各类高中学校特长生录取名单的公告
10 月前
踢足球的小熊猫  ·  中国男篮--体育--人民网
1 年前
天涯  ·  国内首个类 ChatGPT 模型:复旦大学 MOSS 今日正式开源,RTX 3090 显卡可运行 - IT之家
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号