- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
9.2 灰度线性变换
灰度线性变换是最常用的点运算 操作之一,下面先介绍其基本原理。
9.2.1 基本原理
灰度线性变换是灰度变换的一种,图像的灰度变换通过建立灰度映射来调整源图
像的灰度从而达到图像增强的目的。灰度映射通常是用灰度变换曲线来表示的,
如图 9-7 所示。
灰度线性变换就是将图像的像素值通过指定的线性函 数进行变换,以此增强或
者减弱图像的灰度。灰度线性变换的公式就是常见的一维线性函数:
g(x, y)=kf(x, y)+d
设 x 为原始灰度值,则变换后的灰度 值 y 为:
也可以在坐标系中表示转化关系,如图 9-7 所示。
图9-7 灰度线性变换
图9-7 坐标中的横轴表示输入灰度值,范围是 0 至 255;纵坐标表示输出灰度值,
范围同样是 0 至 255;直线则为线性变换函数的图形。如果将输入灰度值作为自
变量 x,则输出的灰度值就是函数y=T (x) 的运算结果。对于线性变换而言,有
T (x)=kx+d。例如图9-7 中的变换函数为T (x)=x, 即原公式中的 k=1,d=0。
由数学知识可以知道k 表示直线的斜 率,也就是倾斜程度;d 为线性函数在 y
轴的斜率。下面通过讨论 k 的取值来分析灰度线性变换的效果。
1)当k1 时
此时可用 于增加图像的对比度。图像的像素值在变换后全部增大,整体显
示效果被增强,如图 9-8 所示。
图9-8 变换后的图像、对应变换函数和直方图
可以看 到,图像经过变换后,其灰度分布被拉伸了。读者可以与图 9-1 中
的直方图进行比较。
2)当k=1 时
这种情况 常用于调节图像亮度。在第 6 章中已经介绍过了,亮度的调节就
是让图像的各像素值都增加或者减少一定量。这种情况下可以通过改变 d 的值达
到增 加或者减少图像亮度的目的,如图 9-9 所示。
图9-9 利用线性变换改变图像亮度
可以看 到,当 d0 时图像亮度增加,反之则减少。对应直方图的显示效果
是灰度分布整体向右或者向左平移。
3)当0k1 时
效果与 k1 时刚刚相反,图像的对比度和整体效果都被削弱。从图 9-10 中
的直方图可以看到,灰度分布被集中在一段区域上。k 越小,图像的灰度分布越
窄,图像看起来也就越偏灰色。
图9-10 利用线性变换改变图像对比度
4)当k0 时
在这种情 况下,源图像较亮的区域变暗,而较暗的区域会变亮。此时可以
使函数中的 k=-1,d=255 让图像实现反色效果,如图 9-11 所示。
图9-11 利用线性变换让图像反色
9.2.2 编程实现
1.线性变换函数
灰度线性变换的函数代码如下:
/********************************************************************
*******
* 作用: 线性变换函数
* 参数:
* pixel: 原始像素数组
* tempPixel: 保存变换后的图像像素数组
* width: 原始图像宽度
* height: 原始图像高度
* slope: 线性函数的斜率
* inter: 线性函数的截距
* 备注: 此函数对于彩色图同样适用
*********************************************************************
******/
void LineTrans(BYTE* pixel, BYTE* tempPixel, UINT width, UINT height,
double slope, double inter)
{
// 灰度映射表
BYTE map[256];
// 保存运算后的临时值
double dTemp;
for (int i = 0; i 256; i++)
{
// 计算当前像素变换后的值
dTemp
原创力文档


文档评论(0)