[图像增强]三. 灰度线性转换
2013-08-12 13:40
211 查看
一. 线性变换
X(原灰度)经过一直线方程转换后得到Y(新灰度)
上图X, Y坐标都代表灰度值, 区间都在[0, 255]之间.
灰度拉伸, 灰度的直线变换, 对数变换等都是一样的原理: X代表原图像某像素的灰度值, X经过一函数式变换后得到Y, Y就代表了变换后该像素的灰度值. 当然Y不应该大于255(在8位的灰度图中)
二. 直线方程
Y = k * X + b(Y大于255的取255, 小于0的取0)
三. 参考代码
(代码来自: visual c++数字图像处理开发入门与编程实践 代码)/****************************************************************************** * 作用: 线性变换函数 * 参数: * 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 = slope * i + inter; // 如果超界则修改其值 if (dTemp < 0) dTemp = 0.0; else if (dTemp > 255) dTemp = 255; // 四舍五入 map[i] = int(dTemp + 0.5); } // 线性变换后的值直接在映射表中查找 for (UINT i = 0; i < width * height; i++) { for (int j = 0; j < 4; j++) tempPixel[i*4+j] = map[ pixel[i*4+j] ]; } }
三. 用途和说明
灰度的线性变换用到的线性灰度变换函数f(x)是一个一维线性函数:f(x) = kx + d,应用到图像上就带人各像素点的灰度值:Gd=f(Gs) = k*Gs + d;其中k为线性函数的斜率,d为线性函数在y轴的截距。Gs表示输入图像的灰度,Gd表示输出图像的灰度。
当k>1时,输出图像的对比度将增大;
当k<1时,输出图像的对比度将减小;
当k=1且d≠0时,操作使所有的灰度值上移或下移,其效果是使整个图像变暗或变亮。
当k<0,暗区域将变亮,亮区域将变暗,点运算完成了图形求补运算。
特殊情况:1、当k=1,d=0时,输出图像与原图像相同。2、当k=-1,d=255时,输出图像的灰度正好相反。
参考:
http://3352101.blog.163.com/blog/static/126753097201032611282752/
相关文章推荐
- 图像增强中的灰度拓展
- 图像基础13 灰度变换与图像增强
- 图像增强中的灰度拓展
- 灰度图像--图像增强 直方图均衡化(Histogram equalization)
- 图像增强之线性灰度增强
- 【数字图像处理】[1]--灰度变换增强
- 灰度图像增强
- 灰度图像--图像增强 拉普拉斯算子
- OpenCV图像增强——通过扩展灰度范围来增加对比度
- 灰度图像--图像增强 Robert算子、Sobel算子
- 利用createTrackbar调节图像信息增强暗部,灰度渐变,通道调节
- 灰度图像--图像增强 锐化基础
- 灰度图像--图像增强 直方图均衡化(Histogram equalization)
- 灰度图像--图像增强 非锐化掩蔽 (Unsharpening Mask) .
- 灰度图像--图像增强 直方图均衡化(Histogram equalization)
- 灰度图像增强(线性灰度增强)
- 灰度图像--图像增强 双边滤波 Bilateral Filtering
- 灰度图像--图像增强 中值滤波
- 灰度图像--图像增强 平滑之均值滤波、高斯滤波
- 灰度图像--图像增强 非锐化掩蔽 (Unsharpening Mask)