• 基于C++的图像增强处理


    资源下载地址:https://download.csdn.net/download/sheziqiong/86812895
    资源下载地址:https://download.csdn.net/download/sheziqiong/86812895
    目录
    一、 实验内容 1
    二、 实现方法 1
    1、线性对比度展宽 1

    1. // 线性对比展宽 2
      2、非线性动态范围调整 3
    2. // 非线性动态范围调整 4
      3、灰度直方图均衡化 4
      三、 结果分析 6
      1、线性对比度展宽 7
      2、非线性动态范围调整 8
      3、灰度直方图均衡化 9
      四、 结论与展望 9
      一、实验内容
      在所给代码基础上自己编写C/C++ 子函数实现如下功能:
      1)线性对比度展宽
      2)非线性动态范围调整
      3)灰度直方图均衡化。
      二、实现方法
      1、线性对比度展宽
      算法原理:
      对比度展宽的目的是:通过将亮暗差异(即对比度)扩大,来把人所关心的部分强调出来。
      原理是,进行像素点对点的,灰度级的线性影射。该影射关系通过调整参数,来实现对亮暗差异的扩大。
      实现方法:
      设原图、处理后的结果图的灰度值分别为[f(i,j)]和[g(i,j)];
      要求[g(i,j)]和[f(i,j)]均在[0,255]间变化,但是g的表现效果要优于f。
      因为f和g的取值范围相同,所以通过 抑制 不重要的部分,来 扩展 所关心部分的对比度。
      为了达到上面所提出的目的,原图(横轴上的f(i,j))与处理后图(纵轴上的g(i,j))的灰度影射关系可用下图表示。
      这次实验我完成了线性对比度展宽、非线性动态范围调整、灰度直方图均衡化三个内容,体会到了不同方法对提高图片清晰度之间的效果和差别,这是一件非常有趣且富有意义的事情。
      在实验的过程中,我也遇到了一些困惑,比如对于上一个实验所用的图片,其效果并不是很好,原因在于该图片本身的清晰度就很高,再换了一张图片之后其效果有了明显的改善。其次就是对于一些参数的选取,比如非线性动态范围调整里的c,也会对图像产生影响。
    //ReadBitMap
    //
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    #define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)
    typedef unsigned char BYTE;
    typedef unsigned short WORD;
    typedef unsigned long DWORD;
    typedef long LONG;
    
    #pragma pack(1) //强制内存以1字节为单位对齐
    
    //位图文件头信息结构定义
    //其中不包含文件类型信息(由于结构体的内存结构决定,要是加了的话将不能正确读取文件信息)
    typedef struct tagBITMAPFILEHEADER
    {
        WORD bfType;
        DWORD bfSize;     //文件大小
        WORD bfReserved1; //保留字,不考虑
        WORD bfReserved2; //保留字,同上
        DWORD bfOffBits;  //实际位图数据的偏移字节数,即前三个部分长度之和
    } BITMAPFILEHEADER;
    
    //信息头BITMAPINFOHEADER,也是一个结构,其定义如下:
    typedef struct tagBITMAPINFOHEADER
    {
        //public:
        DWORD biSize;         //指定此结构体的长度,为40
        LONG biWidth;         //位图宽
        LONG biHeight;        //位图高
        WORD biPlanes;        //平面数,为1
        WORD biBitCount;      //采用颜色位数,可以是1,2,4,8,16,24,新的可以是32
        DWORD biCompression;  //压缩方式,可以是0,1,2,其中0表示不压缩
        DWORD biSizeImage;    //实际位图数据占用的字节数
        LONG biXPelsPerMeter; //X方向分辨率
        LONG biYPelsPerMeter; //Y方向分辨率
        DWORD biClrUsed;      //使用的颜色数,如果为0,则表示默认值(2^颜色位数)
        DWORD biClrImportant; //重要颜色数,如果为0,则表示所有颜色都是重要的
    } BITMAPINFOHEADER;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    资源下载地址:https://download.csdn.net/download/sheziqiong/86812895
    资源下载地址:https://download.csdn.net/download/sheziqiong/86812895

  • 相关阅读:
    el-input自动获取焦点
    迈向企业开发Spring详解!
    《深入浅出.NET框架设计与实现》笔记6.4——ASP.NET Core应用程序多种运行模式之四——服务承载
    泛微E8事务回滚类
    Docker 容器技术 (上) 环境安装和部署、容器镜像、使用IDEA构建Springboot程序镜像、远程仓库、容器网络管理
    C语言天花板——指针(进阶1)
    保姆级教程 --redis启动命令
    Java开发之多线程包含代码调试【面试篇 持续更新】
    MyBatis-Plus实现SQL执行前统一处理添加只读标识等注释
    【开源三方库】Fuse.js:强大、轻巧、零依赖的模糊搜索库
  • 原文地址:https://blog.csdn.net/newlw/article/details/127440449