• 图像处理之原理


    一 中值滤波概念

    中值滤波算法以某像素的领域图像区域中的像素值的排序为基础,将像素领域内灰度的中值代替该像素的值[1];

    如:以3*3的领域为例求中值滤波中像素5的值

     

                      图1

    1)int pixel[9]中存储像素1,像素2...像素9的值;

    2)对数组pixel[9]进行排序操作;

    3)像素5的值即为数组pixel[9]的中值pixel[4]

        中值滤波对处理椒盐噪声非常有效。

    二 中值滤波代码实现

    百度云地址

    以下为MedianFilter文件中class MyImage中的中值滤波功能的实现代码:

     1 //中值滤波:本算法采用3*3的领域范围
     2 void MyImage::MedianFilterOper()
     3 {
     4     //0. 准备:获取图片的宽,高和像素信息,
     5     int const num = 3 * 3;
     6     unsigned char pixel[num] = { 0 }; //保存领域的像素值
     7     int width = m_bmpInfo.biWidth; //位图的宽度
     8     int height = m_bmpInfo.biHeight; //位图的高度
     9     int widthbyte = (width * m_bmpInfo.biBitCount / 8 + 3) / 4 * 4;
    10     //相对于中心点,3*3领域中的点需要偏移的位置
    11     int delta[3 * 3][2] = {
    12         { -1, -1 }, { -1, 0 }, { -1, 1 }, { 0, -1 }, { 0, 0 }, { 0, 1 }, { 1, -1 }, { 1, 0 }, {1, 1}
    13     };
    14     
    15     //1. 中值滤波
    16     for (int i = 1; i < height-1; ++i)
    17     {
    18         for (int j = 1; j < widthbyte-1; ++j)
    19         {
    20             //1.1 提取领域值
    21             for (int k = 0; k < num; ++k)
    22             {
    23                 pixel[k] = m_imagedata[(i + delta[k][0])*widthbyte + j + delta[k][1]];
    24             }
    25             //1.2 排序:利用快排函数
    26             qsort(pixel, num, sizeof(unsigned char), compa);
    27             //1.3 获取该中心点的值
    28             m_imagedata[i*widthbyte + j] = pixel[num / 2];
    29         }
    30     }
    31 }
    View Code

    三 程序运行效果及总结

        执行MedianFilter\可执行文件\MedianFilter.exe文件,MedianFilter\可执行文件\Image文件夹下将根据初始图片init.bmp生成中值滤波后的图片result.bmp,对比如下:

     

                  图2:init.bmp                                    图3:result.bmp

    总结:因为可能对图片格式的理解仍然不到位,程序的执行效果虽然去除了大部分的噪声,但并未完全去除,还需要优化。

    四 参考文献

    [1] 冈萨雷斯等数字图像处理(第三版)[M].电子工业出版社,2011:96

    [2] 宋亮等浅谈图像处理与BMP图像文件格式.[EB/OL].

    http://wenku.baidu.com/link?url=8rmY9e-j_9n1zlgrrm_ptZRZw_BoZp754gNwgPoCiqmGPQ0iNU7nPGPIp4_7PfVncSDohLlVFChKGlsneYJUzrS7L70JdDZpkVS12A_bEO3, 2014

    [3] 江南烟雨. C++读取、旋转和保存bmp图像文件编程实现[EB/OL].

    http://blog.csdn.net/xiajun07061225/article/details/6633938, 2011

    备注:MedianFilter文件夹中的“读取图片”和“保存图片”的代码参考[2][3]

     

  • 相关阅读:
    编程实现Windows系统自动登录
    IOS开发笔记
    所有的GUI Toolkit,类型之多真开眼界
    文件保护DEP
    Delphi 重启应用程序(创建Bat文件的Process)
    Linux的几个概念,常用命令学习
    Delphi内存操作API函数(备查,并一一学习)
    Servle中的会话管理
    Windows软件在Linux上的等价/替代/模仿软件列表 (抄一个)
    Go 的文件系统抽象 Afero
  • 原文地址:https://www.cnblogs.com/tanfy/p/median_filter.html
Copyright © 2020-2023  润新知