- 11
- 0
- 约9.11千字
- 约 18页
- 2019-07-02 发布于天津
- 举报
下载源介绍一些基本的图像处理函数涉及使用基于滤镜或者直方图的函数来处理像素分布一些增强图像以各种方式显示或者去除噪声本文将描述为多文档接口图像处理应用程序开发的代码背景应用程序称为没有使用因为历史原因因为它已经在最流行的格式中打开和保存图像了还具有打开类型图像感谢的原始代码某些文本图像和某些原始二进制类型图像的能力成员函数将图像文件读入底层图像左下角的原点设备独立位图但是这可以能是不方便的访问像素因这里图像被重新格式化为顶层原点位于左上角和位由于大多数显示适配器现在是颜色请参见代码在自上而下的模
下载源 255.1 KB
介绍
一些基本的图像处理函数涉及使用基于滤镜或者直方图的函数来处理像素分布。 一些增强图像以各种方式显示或者去除噪声。 本文将描述为MFC多文档接口( MDI ) 图像处理应用程序开发的C++ 代码。
背景
应用程序称为 Imagr ( 没有使用因为历史原因) built built MFC multi-document utilizes utilizes,因为它已经在最流行的格式中打开和保存图像了。 Imagr 还具有打开pcx类型图像( 感谢 Roger Evans的原始代码)。某些ASCII文本图像和某些原始二进制类型图像的能力。 CImage 成员函数 CImage::Load 将图像文件读入底层( 图像左下角的原点) 设备独立位图( DIB )。 但是,这可以能是不方便的访问像素,因这里图像被重新格式化为顶层( 原点位于左上角) 和 32位( 由于大多数显示适配器现在是 true 颜色)。 请参见 Convert32Bit() 代码。
在自上而下的模式下,像素操作变得更加简单。 CImage::GetBits() 可以用于返回指向第一个像素( 左上角像素)的指针,然后通过简单地在单个 for -loop中增加指针来访问后续像素。 图像分为三种像素类型之一: 灰度。颜色和整数( 有时称为 raw,这是由一个特殊的数据获取过程衍生出来的)。 只有灰度图像的图像处理速度比具有三个颜色通道的彩色图像要快。 原始整数图像可以有更多的位深度处理,但必须减少到 8位( 值 0.。255 ) 来显示。
值得一提的是,微软类的CImage 与普通位图的存储颜色不同。 如果你使用的是典型的函数,它将返回蓝色比特,而不是 RGB。 如果将红色。绿色和蓝色值存储在 RGB ( 红色,绿色,蓝色) 宏中,红色和蓝色将不正确显示。 绿色的部分是一样的,只是蓝色和红色。 代码( 请参见 ImagrDoc.h。) 中,下面的定义用来帮助保持颜色的直线。
#define RED(rgb) (LOBYTE((rgb) 16))
#define GRN(rgb) (LOBYTE(((WORD)(rgb)) 8))
#define BLU(rgb) (LOBYTE(rgb))
#define BGR(b,g,r) RGB(b,g,r)
例如,RED(p) 将像预期的像素 p 那样返回红位,BGR(b, g, r) 将红色。绿色和蓝色字节存储到 32位像素。
MDI优势
设计 Imagr 作为一个MDI应用程序提供了能够比较图像或者做两个图像操作( 就像下面解释的)的好处。 这里外,还要有一个图像副本的能力,因这里可以在尝试它的他过滤器之前保存过滤操作状态。 MDI也做一些重要的背景杂务。 通过调用 SetModifiedFlag(),维护变更的状态,以便如果图像关闭,MDI将自动提示用户保存它。 MDI还允许将文件拖放到应用程序中,并在鼠标单击时将它的坐标为活动的图像。
使用代码
应用程序代码作为一个完整的项目包含在 Microsoft Visual Studio 2008或者 2010中。
直方图函数
在当前应用中,直方图是图像中像素值分布的图形表示。 在 256尺寸的array ( 或者 256 x 3彩色图像) 中维持每个像素数的数目,并绘制到对话窗口。 注意:对于 Imagr 代码中的像素,你将看到直方图中的像素 0和 255,以处理完整整数图像的原始类型。 下面显示了灰度图像及其关联的直方图。 在直方图中可以看到,图像中的大多数像素位于区域 32.。112.
图 1 - 带直方图的灰度图像
彩色图像直方图( 下方)的一个例子显示红色。绿色和蓝色通道分布。
图 2 - 全彩色图像直方图
在标准化函数( 也称为对比拉伸) 中,直方图曲线可以被拉伸或者压缩到所需的范围。 通常,这是将像素范围扩展到全范围的强度( 0至 255 ),给出比较均匀的图像。 下图显示了与相关直方图正常化前后的低对比度图像的示例。 归一化有效地重新分布直方图而不会明显改变直方图曲线。
图 3 - ( 顶端) 前和正常化后的直方图( 底部)
在图像中每个像素上操作的规范化算法是:
pixel = (pixel - min)*(nmax - nmin)/(max - min) + nmin
max 和 min 是图像中的起始最大值和最小像素值,nmax 和 nmin 是新的最大值和最小像素值。
下面显示了处理三种类型图像像素(。灰度,颜色和原始整数)的规范化代码。 在灰度代码中调用 RED() 宏来隔离整数像素的下字节,这在这个例子中不是真正的红色。 这里函数从双 slider 类(。感谢 includeh10,CodeProject文章调用,它
原创力文档

文档评论(0)