我们前面提到过图像二值化,图像反转,本质上是对图像的所有像素点的灰度进行操作,属于灰度变换的内容。灰度变换的主要目的是用于图像增强

而对比度拉伸是图像增强的一种方法,也属于灰度变换操作。我们看如下图像:

可以看到,这张图片非常灰暗。我们查看下其直方图。

import cv2
import matplotlib.pyplot as pltfarina = cv2.imread("farina.png", 0)hist_full = cv2.calcHist([farina], [0], None, [256], [0, 256])plt.plot(hist_full)
plt.show()


可以看到所有像素的灰度值大部分集中在20-50之间,这使得整个图像很暗淡。也就是说对比度不高。如果我们通过灰度变换,将灰度值拉伸到整个0-255的区间,那么其对比度显然是大幅增强的。可以用如下的公式来将某个像素的灰度值映射到更大的灰度空间:

I(x,y)=I(x,y)−IminImax−Imin(MAX−MIN)+MINI(x,y)=I(x,y)−IminImax−Imin(MAX−MIN)+MIN

I(x, y)=\frac {I(x,y)-Imin}{Imax-Imin}(MAX-MIN)+MIN

其中Imin,Imax是原始图像的最小灰度值和最大灰度值,MIN和MAX是要拉伸到的灰度空间的灰度最小值和最大值。

Imax = np.max(farina)
Imin = np.min(farina)
MAX = 255
MIN = 0
farina_cs = (farina - Imin) / (Imax - Imin) * (MAX - MIN) + MIN
cv2.imshow("farina_cs", farina_cs.astype("uint8"))
cv2.waitKey()

可以看出,对比度提升了很多。我们再看看其直方图,可以看到已经充满了整个灰度空间。

除了上述方法,对比度拉伸还有其它方法吗?当然是有的。例如直方图位移法(Histogram shifting)。公式如下:,

I(x,y)=I(x,y)+offsetI(x,y)=I(x,y)+offset

I(x,y)=I(x,y)+offset
在每个像素位置的灰度值增加一个偏移量offset。注意,这个offset可以是正数,也可以是负数。正的话,整体亮度变亮,负的话,整体亮度变暗。需要注意的是控制offset的值大小,不要越界。

farina_cs = farina + 100
cv2.imshow("farina_offset", farina_cs.astype("uint8"))
cv2.waitKey()
hist_full = cv2.calcHist([farina_cs.astype("uint8")], [0], None, [256], [0, 256])
plt.plot(hist_full)
plt.show()

下面分别是使用直方图位移方法后的图像和其直方图。

可以看出直方图与原始直方图形状一模一样,只是在横轴上有所偏移。这种方法的图像增强效果并没有上一种方法好。

图像增强之对比度拉伸相关推荐

  1. 数字图像处理--图像增强之对比度拉伸

    我们前面提到过图像二值化,图像反转,本质上是对图像的所有像素点的灰度进行操作,属于灰度变换的内容.灰度变换的主要目的是用于图像增强. 而对比度拉伸是图像增强的一种方法,也属于灰度变换操作.我们看如下图 ...

  2. 灰度图像归一化到0~255(对比度拉伸)的OpenCV代码实现

    如题,代码的功能很简单,这里就不多做解释了,直接上源代码吧!其实这个代码我之前就已经写过C的版本了,详情可参见我写的博文在OpenCV环境下写的灰度图像二维傅里叶换,幅值计算,频谱平移和将数值归一化到 ...

  3. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波4 - 分段线性变换 - 对比度拉伸

    目录 分段线性变换 对比度拉伸 最大最小值拉伸 分段线性变换 优点 形式可以任意复杂 缺点 要求用户输入很多参数 对比度拉伸 光照不足.成像传感器的动态范围偏小.图像获取过程中镜头孔径的设置错误 点( ...

  4. python库skimage 图像直方图均衡化、自适应均衡化、对比度拉伸实现

    直方图全局均衡化 from skimage import exposure # Equalization img_eq = exposure.equalize_hist(img) 直方图自适应均衡化 ...

  5. 灰度拉伸python_对比度拉伸(一些基本的灰度变换函数)基本原理及Python实现

    1. 基本原理 对比度拉伸是扩展图像灰度级动态范围的处理.通过在灰度级中确定两个点来控制变换函数的形状.下面是对比度拉伸函数中阈值处理的代码示例,阈值为平均值. 2. 测试结果 图源自skimage ...

  6. 数字图像处理实验之对比度拉伸

    一幅图像中,最高灰度级和最低灰度级的差成为对比度.一幅低对比度的图像,看起来细节会少很多.可以通过对比度拉伸提高图像对比度,显示更多细节.先来看看对比度拉伸的典型变换: 书本中(冈萨雷斯:数字图像处理 ...

  7. python图像对比处理_图像处理 | 灰度变换与图像对比度拉伸

    一.问题与解决思路 图像实质上就是一个包含了许多像素点的矩阵. 具体计算过程如下: 通过min()函数以及max()函数分别求出处理前原图像的灰度级最小值与最大值: 对原图像进行归一化处理,即用[图像 ...

  8. 基于FPGA的视频图像直方图均衡 图像处理 图像增强 VGA对比度增强CLAHE

    基于FPGA的视频图像直方图均衡 图像处理 图像增强 VGA对比度增强CLAHE 本设计是基于FPGA的视频图像直方图均衡,实现的效果是可以实时地将摄像头采集的图像进行直方图均衡,具体过程是FPGA控 ...

  9. 数字图像处理实验之对比度拉伸、直方图均衡化和规定化

    [实验内容]:  一.运用Matlab对Lena进行对比度拉伸增强(利用 imadjust  )  二.运用Matlab对图像进行直方图均衡化和规定化 Matlab版本:R2015a 一.运用Matl ...

最新文章

  1. 三两下实现NLP训练和预测,这四个框架你要知道
  2. Java 8 一行代码解决了空指针问题,太厉害了...
  3. sublime text3 运行lua_[电脑常识] 用这4个系统垃圾清理软件,让电脑操作系统运行如飞 !...
  4. 【开发环境】Mac 中安装 Python3 最新版本 ( 下载 Python 最新版本 | 安装 Python3 | 验证 Python3 )
  5. 红外传感器型号和参数_LARK1Z CO2 20%VOL红外气体传感器
  6. Mysql的concat concat_ws group_concat
  7. python语言编程中的保留字_Python语言程序设计整理
  8. 干货 | 算法和编程面试题精选TOP50!(附代码+解题思路+答案)
  9. 脚本格式(写脚本完成后最好完成后做一些脚本格式初始化)
  10. 创造11,你pick哪位讲师?
  11. linux下ip协议(V4)的实现(三)
  12. 二级域名会不会分散主域名权重
  13. 什么是ESAM安全模块
  14. 远程桌面管理工具源码
  15. 【MOGDB/openGauss的txid_snapshot 数据类型和相关函数】
  16. 三峡学院计算机调剂,2018年重庆三峡学院考研预调剂信息公布
  17. Docker修改无法启动的容器的配置文件
  18. C/C++程序员学习路线
  19. 打造全新的网站群管理系统
  20. 自定义UDF、UDAF、UDTF函数

热门文章

  1. 最高75K,至多可拿16薪,这个岗位成财富密码?
  2. 后端开发实践:Spring Boot项目模板,拿去用吧!
  3. 蓝桥杯-8-1因式分解(java)
  4. JavaScript:window.onload问题
  5. crt mysql中文乱码_CRT 和mysql 中文乱码解决方式
  6. 求两条轨迹间的hausdorff距离_圆锥曲线三种定义间的关系
  7. 深入理解Lambda
  8. char转成string_真没想到,一个小小的String居然还有这么多窍门?
  9. ae 创建图像等高线 蒙版_Pixelmator ——图像处理软件
  10. java 反射 成员变量_java使用反射访问成员变量的值示例