资源下载地址:https://download.csdn.net/download/sheziqiong/86812895
资源下载地址:https://download.csdn.net/download/sheziqiong/86812895
目录
一、 实验内容 1
二、 实现方法 1
1、线性对比度展宽 1
- // 线性对比展宽 2
2、非线性动态范围调整 3 - // 非线性动态范围调整 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 <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <math.h>
#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;
资源下载地址:https://download.csdn.net/download/sheziqiong/86812895
资源下载地址:https://download.csdn.net/download/sheziqiong/86812895