【C++】【图像处理】均值滤波和高斯滤波(低通滤波)算法解析(以.raw格式的图像为基础进行图像处理、gray levels:256)

这篇具有很好参考价值的文章主要介绍了【C++】【图像处理】均值滤波和高斯滤波(低通滤波)算法解析(以.raw格式的图像为基础进行图像处理、gray levels:256)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 1 void meanFilter(BYTE* image, int width, int height, BYTE* outImg)
 2 {
 3     //均值滤波
 4     int smth[9];
 5     int i, j, m, n;
 6     BYTE block[9];
 7     
 8     // 高斯卷积核初始化
 9     smth[0] = 1, smth[1] = 2, smth[2] = 1,
10     smth[3] = 2, smth[4] = 4, smth[5] = 2,
11     smth[6] = 1, smth[7] = 2, smth[8] = 1;
12 
13     int value;
14     for (i = 0;i < 9;i++) //初始化均值卷积核
15         smth[i] = 1;
16 
17     for (i = 0;i < height;i++) 
18         for (j = 0;j < width;j++) {
19             //将输出图像边缘的像素值设为 0
20             if (i == 0 || j == 0 || i == height - 1 || j == width - 1) 
21                 outImg[i * width + j] = 0;
22 
23             //提取以当前像素为中心的 3x3 区域的像素值,然后利用卷积操作计算这个区域的均值,最后将计算得到的均值作为输出图像中对应位置的像素值
24             else {
25                 for (m = -1;m < 2;m++) 
26                     for (n = -1;n < 2;n++) 
27                         block[(m + 1) * 3 + n + 1] = image[(i + m) * width + j + n];
28                 value = convolution(smth, block);
29                 outImg[i * width + j] = BYTE(value / 9.0f); // 高斯为 value / 16.0f
30             }
31         }
32 
33 }
34 
35 
36 int convolution(int* operatr, BYTE* block)
37 {
38     int value;
39     int i, j;
40     value = 0;
41     //卷积运算
42     //遍历 3x3 区域内的每个像素,并根据卷积核的权重计算出卷积结果
43     for (i = 0;i < 3;i++) 
44         for (j = 0;j < 3;j++) 
45             value += operatr[i * 3 + j] * block[i * 3 + j];
46     /*
47     1 1 1
48     1 1 1
49     1 1 1
50 
51     0 0 0
52     0 x y
53     0 j k
54     */
55 
56     return value;
57 
58 }  

 中值滤波:

 1 void midFindFiltering(BYTE* image, int width, int height, BYTE* outImg)
 2 {
 3     //中值滤波
 4     int i, j, m, n;
 5     BYTE block[9];
 6 
 7     int value;
 8 
 9     for (i = 0;i < height;i++) 
10         for (j = 0;j < width;j++) {
11             if (i == 0 || j == 0 || i == height - 1 || j == width - 1)
12                 outImg[i * width + j] = 0;
13             else {
14                 for (m = -1;m < 2;m++)
15                     for (n = -1;n < 2;n++)
16                         block[(m + 1) * 3 + n + 1] = image[(i + m) * width + j + n];
17             }
18             value = MidValueFind(sizeof(block), block);
19             outImg[i * width + j] = value;
20         }
21 }

中值滤波中的MidValueFind函数的实现就是冒泡排序,最后去中间值返回:

int MidValueFind(int num, BYTE* d)
{
    int value;

    int i, j;
    int temp;
    //冒泡排序
    for (i = 0; i < num - 1; i++)
        for (j = i + 1; j < num; j++)
        {
            if (d[i] < d[j])
            {
                temp = d[i];
                d[i] = d[j];
                d[j] = temp;
            }
        }

    return d[num / 2];

}

 Soble算子边缘提取:

 1 void sobel(BYTE* window, int wid, int hei, int* sob_x, int* sob_y)
 2 {
 3     int so_x[9];//horizontal 水平边缘提取卷积核初始化
 4     so_x[0] = -1, so_x[1] = 0, so_x[2] = 1,
 5     so_x[3] = -2, so_x[4] = 0, so_x[5] = 2,
 6     so_x[6] = -1, so_x[7] = 0, so_x[8] = 1;
 7 
 8     int so_y[9];//vertical   垂直边缘提取卷积核初始化
 9     so_y[0] = -1,   so_y[1] = -2,   so_y[2] = -1,
10     so_y[3] = 0,    so_y[4] = 0,    so_y[5] = 0,
11     so_y[6] = 1,    so_y[7] = 2,    so_y[8] = 1;
12 
13     int i, j, m, n;
14     BYTE block[9];
15     int value;
16 
17     //求图像边缘
18     for (i = 0;i < hei;i++) 
19         for (j = 0;j < wid;j++) {
20             if (i == 0 || j == 0 || i == hei - 1 || j == wid - 1) {
21                 sob_x[i * wid + j] = sob_y[i * wid + j] = 0; // 输出图像边缘归零
22             }
23             else {
24                 for (m = -1;m < 2;m++)
25                     for (n = -1;n < 2;n++)
26                         block[(m + 1) * 3 + n + 1] = window[(i + m) * wid + j + n];
27             }
28             sob_x[i * wid + j] = convolution(so_x, block);
29             sob_y[i * wid + j] = convolution(so_y, block);
30 
31         }
32 }

 

 

总结:

1、均值、高斯滤波和Sobel算子边缘提取的核心,创建卷积核并确定各个点上的权重,然后将边缘灰度级归零(是否边缘归零按业务需求决定),提取非边缘像素点的3x3区域的像素级,最后计算卷积结果再输出。

2、中值滤波核心也可看为是卷积核,但是并不是在卷积核上计算权重,而是进行排序(升降均可)后直接取中间值来确定当前这一点的灰度级。文章来源地址https://www.toymoban.com/news/detail-746062.html

到了这里,关于【C++】【图像处理】均值滤波和高斯滤波(低通滤波)算法解析(以.raw格式的图像为基础进行图像处理、gray levels:256)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Matlab图像处理- 高斯低通滤波器

      高斯低通滤波器 高斯低通滤波器是一种 更平滑的一种滤波器 ,高斯低通滤波器完全没有振铃现象,且边缘平滑。 示例代码 利用输入图像,构建一个截止频率为30的高斯低通滤波器的透视图如下图所示。 效果图片

    2024年02月09日
    浏览(44)
  • matalb 图像处理 低通滤波和高通滤波 (理想,巴特沃斯,高斯 含代码)

    1.低通滤波 主要分为理想低通滤波,巴特沃斯低通滤波,高斯低通滤波 理想低通滤波: 其中:对于大小为M*N的图像,频率点(u,v)与频域中心的距离为D(u,v),其表达式为: 下列的D(u,v)都相同 巴特沃斯低通滤波: 高斯低通滤波: 2.高通滤波 理想高通滤波: 巴特沃斯高通滤波

    2024年02月08日
    浏览(40)
  • python --opencv图像处理滤波详解(均值滤波、2D 图像卷积、方框滤波、 高斯滤波、中值滤波、双边滤波)

    第一件事情还是先做名词解释,图像平滑到底是个啥? 从字面意思理解貌似图像平滑好像是在说图像滑动。 emmmmmmmmmmmmmmm。。。。 其实半毛钱关系也没有,图像平滑技术通常也被成为图像滤波技术(这个名字看到可能大家会有点感觉)。 每一幅图像都包含某种程度的噪声,

    2024年02月04日
    浏览(63)
  • 图像处理中调用matlab自带均值滤波、高斯滤波和中值滤波函数的案例以及自编均值滤波的案例。

    @[TOC](利用matlab自带均值滤波器的代码,分别对一幅图像实现3*3,5*5,7*7,9*9的均值滤波,并对实验结果进行分析。) @[TOC](分别给干净图像添加高斯和椒盐噪声,然后进行均值滤波、高斯滤波和中值滤波,并对实现结果进行分析。) @[TOC](自编均值滤波器对一幅图像实现填充后,

    2024年02月11日
    浏览(41)
  • 图像处理之理想低通滤波器、巴特沃斯低通滤波器和高斯低通滤波器的matlab实现去噪

    一、前言 在一幅图像中, 低频部分对应图像变化缓慢的部分即图像大致外观和轮廓。高频部分对应图像变换剧烈的部分即图像细节(注意图像的噪声属于高频部分) 。 低通滤波器的功能是让低频率通过而滤掉或衰减高频,其作用是过滤掉包含在高频中的噪声。即 低通滤波的效

    2023年04月09日
    浏览(51)
  • Opencv-C++笔记 (13) : opencv-图像卷积一(均值、中值、高斯、双边滤波)与 边缘处理

    头文件 quick_opencv.h:声明类与公共函数 主函数调用 src:输入图像 。 dst:输出图像 。 ksize:内核大小 ,一般用 Size(w,h),w 为宽度,h 为深度。 anchor:被平滑的点,表示取 内核中心 ,默认值 Point(-1,-1)。 boderType:推断图像外部像素的某种边界模式。默认值 BORDER_DEFAULT 目的:

    2024年02月16日
    浏览(153)
  • 图像处理:均值滤波算法

    目录 前言 概念介绍 基本原理 Opencv实现均值滤波 Python手写实现均值滤波 参考文章 在此之前,我曾在此篇中推导过图像处理:推导五种滤波算法(均值、中值、高斯、双边、引导)。这在此基础上,我想更深入地研究和推导这些算法,以便为将来处理图像的项目打下基础。

    2023年04月23日
    浏览(78)
  • 图像处理:高斯滤波算法

    目录 前言 概念介绍 基本原理 卷积核的大小 卷积核的形状和权重比 卷积核的归一化 结论 Opencv实现高斯滤波 Python手写实现高斯滤波 参考文章 在此之前,我曾在此篇中推导过图像处理:推导五种滤波算法(均值、中值、高斯、双边、引导)。这在此基础上,我想更深入地研

    2024年02月02日
    浏览(39)
  • 【图像处理OpenCV(C++版)】——5.3 图像平滑之均值平滑(滤波)

    前言 : 😊😊😊 欢迎来到本博客 😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C++来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快速查询等,随时更新。 😊😊😊 具体食用方式:可以点击本专栏【OpenCV快速查找(更新中)】–搜索你要查询的算子

    2024年02月04日
    浏览(48)
  • matlab实现图像频域处理(低通滤波、高通滤波、同态滤波)

            频域滤波是一种图像处理技术,可以通过在频域中增加或减弱某些频率分量,从而实现图像去噪、锐化、平滑等功能。常见的频域滤波包括频域低通滤波、频域高通滤波和频域同态滤波。            在使用这些滤波器进行频域处理时,通常需要选择合适的参

    2024年02月12日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包