数字图像处理源程序及详解之灰度直方图

  • 格式:doc
  • 大小:189.00 KB
  • 文档页数:21

下载文档原格式

  / 21
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图像的点运算

图像的点运算是图像处理中相对简单的技术,它主要用于改变一幅图像的灰度分布范围。点运算通过一个变换函数将图像的像素一

一转换,最终构成一幅新的图像。由于操作对象是图像的一个个像

素,故得名为“点运算”。点运算的最大特点是输出像素值只与当

前输入像素值有关。点运算的图像处理过程可以用以下公式表示:

g(x, y)=T[f(x, y)]

其中f(x, y)表示输入图像,g(x, y)表示处理后的图像。函数T 是对f的一种变换操作,在这里它表示灰度变换公式。可以看到,

对于点运算而言,最重要的是确定灰度变换公式。变换公式一旦确

定,点运算对于图像的处理效果就确定了。

本章研究的主要内容包括灰度直方图、线性变换、非线性变换、阈值变换、灰度拉伸及灰度均衡等。若无特别说明,本章的点运算

函数所针对的待处理对象即为8位灰度图。

■ 本章学习地图

◆ 学会利用灰度直方图查看图像信息

◆ 了解各种灰度变换公式

◆ 掌握各种灰度变换的实现方法

◆ 进一步了解各种点运算对于图像效果的影响

9.1 灰度直方图

本节介绍灰度直方图的相关概念和实现原理,它是提取图像信息的重要工具之一。

9.1.1 灰度直方图

任何一幅图像都包含着丰富的图像信息,对于图像处理而言,如何提取这些信息并找出其中的特征就显得十分关键。灰度直方图直观地显示了图像灰度分布的情况,这些信息在图像灰度变换等处理过程中显得十分重要。在本章随后的内容中,也会经常通过直方图来分析变换后的图像效果。

图9-1显示一幅灰度图及它所对应的灰度直方图。可以看到,灰度直方图是一个二维图。从数学上来说,它描绘了图像各灰度值的统计特性,显示了各个灰度级出现的次数或概率。从图形上来说,其横坐标表示图像的灰度值,取值范围是0到255。其纵坐标则通过高度来表示出现次数的多少或者概率的高低。在本章中,纵坐标表示像素出现的次数,最大值为该图像在0至 255阶灰度上分布像素出现次数的最大值。

图9-1 利用灰度直方图显示图像灰度分布

需要说明的是,如果没有特别指出,在本章后续内容中的所有变换都是基于图9-1中左侧的图像进行的。

接下来分析直方图的作用。图9-2所示的4幅图像都是根据同一幅图像进行基本灰度特征处理后获得的,分别是高亮度、低亮度、高对比度、低对比度4种类型的图像。每幅图像右侧都显示了对应的直方图。仔细观察可以发现如下特征。

图9-2 4种基本图像及对应的直方图

高亮度图像的直方图组成集中在灰度高的一侧。8位灰度图能表示256种灰度,也就是灰度取值范围为0至255。其中0表示黑色,255表示白色。对于高亮度图像,整个画面的颜色偏亮,故灰度直方图偏向灰度高的一侧。相反,低亮度图像的直方图则偏向灰度较低的一侧。

在高对比度的图像中,直方图的覆盖范围很广。图像在任意一段灰度范围中都有一定的像素数量。同时,高对比图像的灰度分布相比其他图像而言较为均匀,整个直方图显得比较平滑。而低对比度图像的灰度则主要分布在中间狭窄的区域中,图像就像被冲淡了一样。

9.1.2 基本原理

灰度直方图的基本思想是统计。对于拥有256种灰度的图像,灰度值为k的像素个数由一个离散函数确定:

其中n k表示当前图像灰度值为k的像素个数,则对应的出现概率可以使用如下公式表示:

,显然有成立。

其中n表示图像像素个数的总和,可以用图像宽度与高度的乘积来表示。

本章灰度直方图的坐标系为。横坐标表示输入灰度值k,而纵坐标表示对应灰度值的统计个数n k。可见,绘制直方图最重要的是确定灰度值为k的像素个数。直方图在绘制时采用相对高度,即纵坐标的最大值为

y

=max(n0,n1,n2……,n254,n255),如果y max的绘制高度为1,灰度值k的绘制高度max

为。

9.1.3 编程实现

1.效果预览

本节通过对话框实现灰度直方图的显示,其效果见图 9-3所示。

图9-3 灰度直方图对话框

灰度直方图对话框实现了如下功能。

l 灰度直方图的显示。

l 允许用户修改显示灰度的上限和下限。对于一些图像而言,可能某个像素值的计数远远大于其他像素的个数,这样往往看不

清其他灰度的分布。例如白色背景的图片,拥有灰度值255的像素个数

相对较多。该对话框提供了一个灰度区间显示的功能,如图9-4所示。

图9-4 灰度直方图的区间显示

可以看到,改变显示灰度的范围后,用户能够更加清楚地了解某一区域的灰度分布特征。

l 允许用户通过鼠标操作来改变显示灰度的上限和下限。方法很简单,只需要拖动对话框上两侧的蓝色虚线即可。

l 显示当前鼠标所在位置的灰度值及出现的几率。

2.构建MagicHouse

MagicHouse是贯穿本书第3篇的重点实例。它是一款以图像处理为主,综合图像浏览等多种功能的实用软件。MagicHouse支持多种常见图片格式,并实现了以下功能。

l 图像的浏览

l 图像的特效显示

l 图像的点运算

l 图像的几何变换

l 图像的增强

l 图像的滤镜效果

本章将完成MagicHouse框架的搭建工作并在其基础上添加点运算的功能,随后的3章内容都是在已有的MagicHouse框架上进行功能的完善和补充的。

MagicHouse框架是在第8章实例 GraphShower的基础上改进的,它继承了GraphShower的框架结构和图像浏览、特效显示等功能,并新增了如下功能。

1)运行模式

添加了“运行模式”菜单,提供两种运行模式:图片浏览模式,该模式功能与GraphShower完全相同,提供图像的浏览功能;编辑模式,这个模式允许对图像进行各种处理,本章及后面3章的功能都是在该模式下实现的。编辑模式下的图像会被锁定,不能进行图像的浏览。

2)JPEG解码器

MagicHouse使用了第4章编写的JPEG 解码器完成JPEG文件的解码工作。用户只需要将第4章的对应文件添加到MagicHouse的工程下即可。

3)Dib封装类

MagicHouse使用第5章介绍的MyDib 类获取Bmp文件的像素信息,MagicHouse 支持的图像为8位灰度图与24位、32位彩色图像。

4)预览对话框

预览对话框用于显示图像处理后的效果图。它与第5 章中介绍的CPreViewDlg 类很类似,不同的是这里采用GDI+显示图像。

5)统一的图像处理接口

MagicHouse的核心是 CMagicHouseView类,它不但提供了图像的显示和处理功能,还提供了图像的处理接口。下面是CMagicHouseView类中关于图像处理十分重要的成员变量。

public:

BYTE* m_pImageBuffer; // 编辑图像原始像素数组

BYTE* m_pImageTempBuffer; // 处理后的像素数组

UINT m_nPicWidth;

// 当前编辑图像宽度

UINT m_nPicHeight; // 当前编辑图像高度

UINT m_nTempWidth; // 处理后图像的宽度

UINT m_nTempHeight; // 处理后图像的高度