zoukankan      html  css  js  c++  java
  • 图像处理之原理

    一 中值滤波概念

    中值滤波算法以某像素的领域图像区域中的像素值的排序为基础,将像素领域内灰度的中值代替该像素的值[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]

     

  • 相关阅读:
    C# 实现 Snowflake算法生成唯一性Id
    kafka可视化客户端工具(Kafka Tool)的基本使用(转)
    docker 安装kafka
    Model类代码生成器
    使用docker 部署rabbitmq 镜像
    Vue 增删改查 demo
    git 提交代码到库
    Android ble蓝牙问题
    mac 配置 ssh 到git (Could not resolve hostname github.com, Failed to connect to github.com port 443 Operation timed out)
    okhttp
  • 原文地址:https://www.cnblogs.com/tanfy/p/median_filter.html
Copyright © 2011-2022 走看看