图像处理与图像识别笔记(三)图像增强1
图像增强的目的是为了改善图像的视觉效果,为了更便于人或机器的分析和处理,在不考虑图像降质(前提)的情况下,提高图像的可观性。灰度变换是一种典型的图像增强方法,我们通常把图像处理按照处理方法分成空域方法与频域方法两类,灰度变换是一种对点处理的空域处理方法。
一、灰度变换
将一个灰度区间映射到另一个灰度区间的变换称为灰度变换,g(x,y)=T[f(x,y)]g(x,y) = T[f(x,y)]g(x,y)=T[f(x,y)],灰度区间是指0−2550-2550−255的灰度值区间,000是黑色,255255255是白色。灰色变换可使图像动态范围加大,图像对比度扩展,图像清晰,特征明显。灰度变换可以分为线性变换和非线性变换。
1、线性变换
原始图像:f(x,y)f(x,y)f(x,y),灰度范围:[a,b][a,b][a,b],变换后的图像:g(x,y)g(x,y)g(x,y),灰度范围:[c,d][c,d][c,d],存在以下变换关系:
g(x,y)=d−cb−a[f(x,y)−a]+cg(x,y) =\frac{d-c}{b-a}[f(x,y)-a]+cg(x,y)=b−ad−c[f(x,y)−a]+c
2、非线性变换
灰度变换的非线性变换方法包括对数变换和指数变换,对数变换公式为g(x,y)=a+ln[f(x,y)+1]blncg(x,y) = a+\frac{\ln[f(x,y)+1]}{b\ln c}g(x,y)=a+blncln[f(x,y)+1],这个变换扩展低灰度区的对比度,压缩高灰度值。指数变换公式为g(x,y)=bc[f(x,y)−a]−1g(x,y)=b^{c[f(x,y)-a]}-1g(x,y)=bc[f(x,y)−a]−1,与对数变换相反, 指数变换对图像的高灰度区有较大的扩展。
线性灰度变换实例如下,
import cv2
import numpy as np
import matplotlib.pyplot as plt
import pylabdef grayTransformLine(img,c,d):#线性灰度变换img = img/255.0 #转换为0-1Min = img.min()Max = img.max()return (d-c)/(Max-Min)*(img-Min)+cdef main():img = cv2.imread('Lena.jpg',0)new_img = grayTransformLine(img,0.5,1)#变换到0.5-1,整体变亮new_img2 = grayTransformLine(img,0,0.5)#变换到0-0.5,整体变灰暗cv2.imshow('bright',new_img) cv2.imshow('dark',new_img2)cv2.waitKey(0)if __name__ == "__main__":main()
输出结果如下,
3、灰度直方图
图像中像素灰度分布的概率密度函数,设图像尺寸为M×NM×NM×N,共有KKK级灰度,并且具有灰度级rkr_krk的像素数为g(rk)g(r_k)g(rk),则有:p(rk)=g(rk)M×Np(r_k)=\frac{g(r_k)}{M×N}p(rk)=M×Ng(rk),下面我们来计算图像的灰度直方图。
import cv2
import numpy as np
import matplotlib.pyplot as plt
import pylabimg = cv2.imread('Lena.jpg',0)
#images:输入图像,channels:图像的通道,mask:掩膜图像,若计算整幅图则为none,histSize:灰度级的个数
#ranges:像素值的范围
hist_cv = cv2.calcHist(images=[img],channels=[0],mask=None,histSize=[256],ranges=[0,255])
plt.plot(hist_cv)
pylab.show()
上述两幅图的灰度直方图如下所示,
明显看出,第一幅图的灰度分布集中在高值部分,因此整幅图高亮,第二幅图的灰度分布集中在低值部分,整幅图呈灰暗。
4、直方图均衡化
将原始图像的直方图变换为均匀分布的形式,从而增加像素灰度值的动态范围,达到增强图像整体对比度的效果。直方图均衡是一种非线性变换,以牺牲图像的等级为代价。
实现代码如下,
import cv2
import matplotlib.pyplot as plt
import pylabimg = cv2.imread('Lena.jpg',0)
res = cv2.equalizeHist(img) #均衡化
plt.subplot(121),plt.imshow(img,'gray')
plt.subplot(122),plt.imshow(res,'gray')
pylab.show()
均衡化的结果如下,
我们可以看到,均衡化后的图像灰度分布更加均匀,图像对比度明显增强。
上述的均衡化方法是全局上的均衡,有些时候这种操作并不好,会把某些不该调整的部分给调整。Opencv提供另一种局部调整的均衡化,把整个图像分成许多小块,每个小块内部进行均衡化,这种方法叫做对比度受限的自适应直方图均衡化,对于图像直方图存在多峰的图像比较适用,实现代码如下,
import cv2
import matplotlib.pyplot as plt
import pylabimg = cv2.imread('Lena.jpg',0)
#全局直方图均衡化
res = cv2.equalizeHist(img)
#自适应直方图均衡化
clahe = cv2.createCLAHE(clipLimit=2,tileGridSize=(10,10))#
cl1 = clahe.apply(img)
plt.subplot(121),plt.imshow(res,'gray')
plt.subplot(122),plt.imshow(cl1,'gray')
pylab.show()
两种均衡化的结果如下,
我们可以看出,相对于全局均衡化的结果,局部均衡化的效果更加自然一些。
二、同态增晰
我们之前讲到过傅里叶变换,经过傅里叶变换可以得到一幅图像的频域信息,我们可以对图像的频域进行操作达到滤波的目的。频域中的低频成分反映灰度的恒定分量,减弱低频成分可以起到缩小图像灰度范围的作用;频域中的高频成分反映图像的边界特性,增强高频成分可以提升图像的对比度(暗区细节增强并保留亮区细节)。
同态增晰是一种在频域中进行滤波操作的方法,目的是消除图像上照明不均的问题,增加暗区的图像细节,同时又不损失亮区的图像细节,它在频域中同时将图像亮度范围进行压缩和图像对比度进行增强。
同态滤波函数选用高通滤波器,消弱低频成分,加强高频成分。
同态增晰的过程如下,
未完待续
图像处理与图像识别笔记(三)图像增强1相关推荐
- 图像处理与图像识别笔记(一)
本系列是研一课程<图像处理与图像识别>的随堂笔记,主要内容是数字图像处理方面,根据老师的讲课内容与自己的理解所书写,还会有一些具体实现的代码,基于Python,欢迎交流.本篇主要介绍图像处 ...
- 图像处理与图像识别笔记(五)图像增强2
上一节中我们讲解了灰度变换的原理以及实现方法,本节我们讲解空域滤波增强,与灰度变换相同,空域滤波增强是一种空域处理的方法,不过空域滤波不是一种对点做处理的方法,而是利用相邻像素间的关系进行增强.空域滤 ...
- 图像处理与图像识别笔记(六)图像增强3
上一章节中我们讲解了空域滤波的图像增强方法,包括图像的平滑和锐化,本文中,我们首先带来频域滤波的图像增强方法,指在频域中对图像进行变换,需要的基础知识是前述过的图像傅里叶变换,请查看学习. 一.频域滤 ...
- 图像处理与图像识别笔记(二)图像变换
在本章节中,将介绍几种常用的图像变换的方法,即利用数学公式将图像变换成另一种具有特定物理意义的图像,通过新的图像,我们可以观察出原图像的某些特性,且可以对原图像进行滤波.压缩等图像处理的操作,包括傅里 ...
- 数字图像识别笔记(第三章-灰度变换与空间滤波)
title: 数字图像识别笔记(第三章-灰度变换与空间滤波(1)) categories: 数字图像识别 tags: 数字图像识别 date: 2020/10/1 20:33 mathjax: tru ...
- 数字图像处理:实验三 图像增强
实验三 图像增强 图像增强是数字图像处理过程中常采用的一种方法.为了改善视觉效果或便于人和机器对图像的理解和分析,根据图像的特点或存在的问题采取的改善方法或加强特征的措施称为图像增强.图像增强处理是改 ...
- 数字图像识别笔记(第一章绪论)
title: 数字图像识别笔记(第一章绪论) categories: 数字图像识别 tags: 数字图像识别 date: 2020/9/29 23:59 mathjax: true toc: true ...
- 《数字图像处理》读书笔记1:绪论
<数字图像处理>读书笔记1:绪论 1 基本概念 1.1 函数f(x, y) 1.2 数字图像(Digital Image).像素 1.3 电磁波谱(Electromagnetic Spec ...
- 【基于MATLAB的数字图像处理】第四章·图像增强
系列文章 ·[基于MATLAB的数字图像处理]第一章·绪论 ·[基于MATLAB的数字图像处理]第二章·视觉系统与图像处理系统 ·[基于MATLAB的数字图像处理]第三章·基本图像变换 ·[基于MAT ...
最新文章
- 解码转码---System.web.HttpUtility 对象分析
- python【力扣LeetCode算法题库】322-零钱兑换(动态规划)
- 一个创业公司的API网关落地实践--转
- jmail组件 java_Jmail的主要参数列表
- 使用正则表达式从字符串中提取email
- 天线的布局、基本术语、种类、隔离度设计要求介绍
- ICP备案和经营性ICP有何不同
- stm32 HC05驱动
- 官方水晶报表 .NET 应用程序实例下载 (Visual Basic .NET)
- excel表格中怎样让某一行数据一直显示
- 为什么电子计算机奏出美妙的交响,《延安,我把你追寻》教学设计
- 牛客网暑期ACM多校训练营(第三场) J.Distance to Work 计算几何
- 计算机两个用户怎么设置密码,电脑如何设置密码 电脑密码三个设置
- python while循环和for循环转换_Python的While循环和for循环,python,while
- 列表数据导出成Excel
- LE Audio问世!蓝牙5.2加持的TWS耳机打破AirPods专利垄断现状
- Matlab模型开发之——从建模规范开启旅程1 Simulink
- html2canvas.js下载地址
- 9V充3.7V锂电池,12V充3.7V单节锂电池充电芯片和电路图
- jmeter阶梯式加压测试小笔记
热门文章
- oracle杀死进程时权限不足_在oracle中创建函数时权限不足
- onenetsim定位功能吗_经常玩手机的抓紧看看,原来手机键盘还隐藏4个实用功能,真实用...
- blob数据类型_MySQL的数据类型
- 内卷的世界,我们是否可以换一种思维生活?
- Redis系列教程(五):Redis哨兵、复制、集群的设计原理,以及区别
- 如何成为架构师?3条有效的实战经验
- 公开课 | 知识图谱构建与应用概述
- 技术动态 | 事理图谱,下一代知识图谱
- 【NLP-NER】命名实体识别
- git 中文乱码配置