图像变换——分段线性变换
2013-12-05 17:38
183 查看
灰度变换法:
一般成像系统只具有一定的亮度范围,亮度的最大值与最小值之比称为对比度。由于形成图像的系统亮度有限,常出现对比度不足的问题,使人眼观看图像时视觉效果很差,通过灰度变换法可以大大改善人的视觉效果。灰度变换法又可分为三种:线性分段性及分线性变换。
(1)线性变换
假定原图像f(x,y)的灰度范围为[a,b],希望变换后图像g(x,y)的灰度范围扩展至[c,d],线性变换表示式为:
g(x,y) = [(d - c) / (b - a)]f(x,y) + c
此关系式可用下图表示。若图像中大部分象素的灰度级分布在区间[a,b],很小部分的灰度级超出了此区间,为改善增强的效果,可令:
g(x , y) = c 0 < f(x , y) < a
g(x , y) = [(d - c) / (b - a)] f(x , y) + c a <= f(x , y) <= b
g(x , y) = d b < f(x , y) < Fmax
(2)分段线性变换
为了突出感兴趣的目标或灰度区间,相对抑制那些不感兴趣的目标或灰度区间,常采用分段线性变换法。常用的是三段线性变换法,其数学表达式为:
g(x , y) = (c / a)f(x , y) 0 < f(x , y) < a
g(x , y) = [(d - c) / (b - a)] f(x , y) + c a <= f(x , y) <= b
g(x , y) = [(Gmax - d) / (Fmax - b)][f(x,y) - b + d] b < f(x , y) < Fmax
上式对灰度区间[a,b]进行了线性变换,而灰度区间[0,a] [b , Fmax]受到了压缩。通过细心调整折线拐点的位置及控制分段直线的斜率,可对任一灰度区间进行扩展或压缩。这种变换适用于在黑色或白色附近有噪声干扰的情况。例如照片中的划痕,由于变换后0~a以及b~Fmax之间的灰度受到压缩,因而使噪声干扰得到减弱。
for (int i = 0; i < img_height - 1; i++)
{
for (int j = 0; j < img_width - 1; j++)
{
uchar cur = data[i * img_width + j];
cur = ratio * cur + intercept;//线性变换
data[i * img_width + j] = cur;
if (cur < 0)
{
cur =0;
}
else if(cur > 255)
{
cur =255;
}
}
一般成像系统只具有一定的亮度范围,亮度的最大值与最小值之比称为对比度。由于形成图像的系统亮度有限,常出现对比度不足的问题,使人眼观看图像时视觉效果很差,通过灰度变换法可以大大改善人的视觉效果。灰度变换法又可分为三种:线性分段性及分线性变换。
(1)线性变换
假定原图像f(x,y)的灰度范围为[a,b],希望变换后图像g(x,y)的灰度范围扩展至[c,d],线性变换表示式为:
g(x,y) = [(d - c) / (b - a)]f(x,y) + c
此关系式可用下图表示。若图像中大部分象素的灰度级分布在区间[a,b],很小部分的灰度级超出了此区间,为改善增强的效果,可令:
g(x , y) = c 0 < f(x , y) < a
g(x , y) = [(d - c) / (b - a)] f(x , y) + c a <= f(x , y) <= b
g(x , y) = d b < f(x , y) < Fmax
(2)分段线性变换
为了突出感兴趣的目标或灰度区间,相对抑制那些不感兴趣的目标或灰度区间,常采用分段线性变换法。常用的是三段线性变换法,其数学表达式为:
g(x , y) = (c / a)f(x , y) 0 < f(x , y) < a
g(x , y) = [(d - c) / (b - a)] f(x , y) + c a <= f(x , y) <= b
g(x , y) = [(Gmax - d) / (Fmax - b)][f(x,y) - b + d] b < f(x , y) < Fmax
上式对灰度区间[a,b]进行了线性变换,而灰度区间[0,a] [b , Fmax]受到了压缩。通过细心调整折线拐点的位置及控制分段直线的斜率,可对任一灰度区间进行扩展或压缩。这种变换适用于在黑色或白色附近有噪声干扰的情况。例如照片中的划痕,由于变换后0~a以及b~Fmax之间的灰度受到压缩,因而使噪声干扰得到减弱。
for (int i = 0; i < img_height - 1; i++)
{
for (int j = 0; j < img_width - 1; j++)
{
uchar cur = data[i * img_width + j];
cur = ratio * cur + intercept;//线性变换
data[i * img_width + j] = cur;
if (cur < 0)
{
cur =0;
}
else if(cur > 255)
{
cur =255;
}
}
相关文章推荐
- 数字图像处理-空间域图像增强(一)(图像反转,对数变换,幂次变换、分段线性变换)
- 数字图像处理-空间域处理-灰度变换-基本灰度变换函数(反转变换、对数变换、伽马变换和分段线性变换)
- 图像基本变换---图像线性变换
- 基本图像变换:线性变换,仿射变换,投影变换
- 图像处理算法基础(二)---线性变换和伽马变换
- 在MATLAB和OpenCV环境下写的灰度图像分段线性变换源码!
- Android中图像变换Matrix的原理、代码验证和应用(三)
- android自定义View学习4--图像剪切与变换
- 对图像进行旋转、缩放等变换
- 二维图像的三角形变换算法解释
- opencv2灰度图像的变换
- 图像变换中常用的一些插值方法
- MATLAB 图像函数(第五章) 图像空间变换和图像配准
- OpenCV学习(六)之图像缩放变换
- 2-数字图像变换
- 图像处理-基本算法之幂次变换
- OpenCV imgproc组件之图像变换
- SSE图像算法优化系列十一:使用FFT变换实现图像卷积。
- 图像处理中常见变换
- Android中图像变换Matrix的原理、代码验证和应用