图像基础13 灰度变换与图像增强
2017-10-18 08:27
281 查看
学习资源《机器学习实践指南 案例应用解析》
采用灰度变换法对图像进行处理可以大大改善图像的视觉效果。灰度变换法可以分为线性变换和非线性变换。
dst=Clog(1+src)
示例程序
程序示例
y=bc(x−a)−1
其中,参数 b、c 控制曲线的变换开关,参数a控制曲线的位置。
程序示例
OpenCV的equalizeHist函数实现直方图均衡化:
示例程序
概念
灰度变换是指根据某种目标条件按一定变换关系逐点改变源图像中每一个像素灰度值的方法。目的是为了改善画质,使图像的显示效果更加清晰。 图像的灰度变换处理是图像增强处理技术中的一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分。采用灰度变换法对图像进行处理可以大大改善图像的视觉效果。灰度变换法可以分为线性变换和非线性变换。
对数变换
对数变换对图像的低亮度区有较大的扩展而对高亮度区进行压缩,简方之就是增强了低值灰度的图像细节,灰度非线性变换公式:dst=Clog(1+src)
示例程序
# -*- coding: utf-8 -*- import cv2 import numpy as np fn = "test.jpg" myimg = cv2.imread(fn) img = cv2.cvtColor(myimg,cv2.COLOR_BGR2GRAY) jp_img = np.array(40*np.log(img+1),np.uint8) cv2.imshow('src',img) cv2.imshow('dst',jp_img) cv2.waitKey() cv2.destroyAllWindows()
分段线性变换
分段线性变换将图像的值域分成多个值域并进行不同的线性变换计算,可以压缩某部分灰度区,扩展另一部分灰度区间。程序示例
# -*- coding: utf-8 -*- import cv2 import numpy as np fn = "test.jpg" myimg = cv2.imread(fn) img = cv2.cvtColor(myimg,cv2.COLOR_BGR2GRAY) w=img.shape[1] h=img.shape[0] newimg = np.zeros((h,w),np.uint8) # 源 Ds_min = 0 Ds_internal = 80 # 中间 Ds_max=255 # 目标 Dd_min = 0 Dd_internal = 160 #中间 Dd_max=255 for m in range(h): for n in range(w): if img[m,n]>Ds_min and img[m,n]<=Ds_internal: newimg[m,n]=int((Dd_internal-Dd_min)/(Ds_internal-Ds_min)*(img[m,n]-Ds_min)+Dd_min) else: newimg[m,n]=int((Dd_max-Dd_internal)/(Ds_max-Ds_internal)*(img[m,n]-Ds_internal)+Dd_internal) print (".") cv2.imshow('src',img) cv2.imshow('dst',newimg) cv2.waitKey() cv2.destroyAllWindows()
指数变换
指数变换的作用是扩展图像的高灰度级、压缩低灰度级,可用于亮度过高的图像。指数变换的基本表达式:y=bc(x−a)−1
其中,参数 b、c 控制曲线的变换开关,参数a控制曲线的位置。
程序示例
# -*- coding: utf-8 -*- import cv2 import numpy as np fn = "test.jpg" myimg = cv2.imread(fn) img = cv2.cvtColor(myimg,cv2.COLOR_BGR2GRAY) b=1.2 c=0.2 a=0.2 newimg=np.array(np.power(b,c*(img-a))-1,np.uint8) cv2.imshow('src',img) cv2.imshow('dst',newimg) cv2.waitKey() cv2.destroyAllWindows()
直方图均衡化
通用用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布,这样就可以用于增强局部的对比度而不影响整体的对比度。OpenCV的equalizeHist函数实现直方图均衡化:
cv2.equalizeHist(src[, dst]) -> dst
示例程序
# -*- coding: utf-8 -*- import cv2 import numpy as np fn = "test.jpg" myimg = cv2.imread(fn) img = cv2.cvtColor(myimg,cv2.COLOR_BGR2GRAY) newimg=cv2.equalizeHist(img) cv2.imshow('src',img) cv2.imshow('dst',newimg) cv2.waitKey() cv2.destroyAllWindows()
相关文章推荐
- 【数字图像处理之(三)】用图像增强谈灰度变换
- 【数字图像处理之(三)】用图像增强谈灰度变换
- 基础图像处理之混合空间增强——(Java:拉普拉斯锐化、Sobel边缘检测、均值滤波、伽马变换)
- 图像处理基础(7):图像的灰度变换
- 灰度图像--图像增强 锐化基础
- 【数字图像处理】[1]--灰度变换增强
- 【数字图像处理之(三)】用图像增强谈灰度变换
- 灰度图像--图像增强 灰度变换
- 灰度图像--图像增强 锐化基础
- 灰度图像--图像增强 直方图均衡化(Histogram equalization)
- 6. 对一幅灰度图像进行离散傅里叶变换,用图像的形式显示其(中心化后的)频谱。改变频谱,在进行 反变换,观察变换前后的区别
- 图像处理之基础---内窥镜医学图像增强
- 图像处理算法基础(二)---线性变换和伽马变换
- 图像增强中的灰度拓展
- 图像增强算法(直方图均衡化、拉普拉斯、Log、伽马变换)
- Opencv学习手册(四)--- 图像灰度变换
- python图像数组操作与灰度变换
- Python图像灰度变换及图像数组操作
- matlab学习笔记(七)---空域变换增强-图像间的代数运算
- 数字图像处理与机器视觉-3-图像灰度变换(2)