图像增强
两类图像增强方法
空域:直接对像素操作
频域:傅里叶变换,小波变换
空域
图像灰度级分布特点
对比度越高,灰度级在空间内分布更加均匀。
直方图均衡化
计算步骤
原始图像直方图 -> 累积概率分布直方图 -> 均值化后的直方图
核心:将累积概率分布的值 以为总灰度级个数对其进行近似划分,然后计算落在每个灰度级的原始灰度级概率分布总和。
计算灰度级概率分布
参数说明
rk:灰度级k的像素
Pr(rk):灰度级为k的像素出现概率
计算灰度级累积概率分布,并按照灰度级总数切分,近似
计算每个灰度级出现的累积概率,以一定精度将其进行舍去,将累积概率相同的出现概率相加,得到均值后的直方图。
由于灰度级是离散的,故采用离散形式
按照灰度级累积概率分布进行映射
以灰度级累积概率分布的值为灰度级,将原始灰度映射到该灰度级。
一共有8个灰度级,0,1,2,3,4,5,6,7。
灰度级0=0;灰度级1=s0=0.19;灰度级2=0;灰度级3=s1=0.25;灰度级4=0;灰度级5=s2=0.21;灰度级6=s3+s4=0.24;灰度级7=s5+s6+s7=0.11
作用
可以将灰度级集中在某一个区间的图像,将其灰度级均匀分散在空间上。
简并现象
处理后的灰度级总是要减少的,称为简并现象。因为数字图像的直方图均衡只是近似结果。
解决方法
增加像素的比特数,如原8bit变成12bit
灰度间隔放大理论的直方图修正法也可以避免简并
对应Opencv函数
直方图统计
hist = cv2.calcHist(images, channels, mask, histSize, ranges, accumulate)
-
-
-
- mages : 原始图像
- channels : 指定通道
- 通道编号需要用中括号括起来
- 输入图像是灰度图时,它的值为[0]
- 彩色图像可以使[0],[1],[2]分别对应通道B,G,R。
- mask : 掩码图像
- 统计整幅图像的直方图,设为None。
- 统计图像某一部分的直方图时,需要掩码图像
- 生成掩码图像
- histSize : BINS的数量
- ranges : 像素值返回RANGE
- 像素值范围,例如:[0, 255]
- accumulate : 累计标识
- 默认值为false,如果被设置为true,则直方图在开始分配时不会被清零
- 该参数允许从多个对象中计算单个直方图,或者用户实施更新直方图
- 多个直方图的累计结果,用户对一组图像计算直方图
-
-
直方图均衡
dst = cv2.equalizeHist(src[, dst])
-
-
-
- src 单通道 8-bit 的图像
- dst 与输入图像大小相同的输出图像
-
-
直方图匹配
作用
将直方图转换为任意指定的形状
步骤
1.输入图像均值化。
2.目标直方图均值化。
3.联系两张直方图。
因为两个中间图像都具有相似的直方图均衡,所有实际上它们是相同的图像,所有y=y'
点处理
点处理是将单个像素点根据其自身数值会周围像素点进行处理。
s=T(r),r是原始像素数值输入,T是点处理函数,s是经过处理之后的像素点数值。
负片变换:s=1-r
阈值处理:大于阈值设置为1,小于阈值设置为0
对比拉伸变换
表达式
E控制函数的陡峭程度,m是变化的中间点,r是输入像素。
对数变换
数学公式
s= c * log(1+r)
c是常数。
作用
log变换可以将狭窄的低的输入灰度级映射到更加宽广的输出范围。
反对数变换则相反。
幂律变换
数学公式
s = c * rγ
γ决定曲线的弯曲程度,γ以1为边界,越趋向于0,曲线越飘,越趋向于无穷大,越往下弯曲。
幂律变换的应用
伽马矫正
显示设备无法线性地反应不同的强度,通常呈现曲线
可以使用幂律变换对其矫正
分段线性变换
数学公式
对于不同灰度级区间,使用不同的函数
灰度切片
处理方式
只输出某个特定灰度级的像素。
作用
用于突出某些特征。
将某个灰度区间的像素值变高。
比特平面分层
一副灰度图,一个像素点由8bit组成,可考虑分层1到8个比特面。
一般来说高阶,特别是最后两个比特平面,比特包含了视觉上很重要的大多数数据。
图像合并
图像平均
其中fi是第i张图片,fi=g+ni,第i中图片有原图g加上噪声ni得到。
图像相减
可以突出两个图像之间的差异。可以快速找出两个图像的不同之处
空域滤波器
邻域操作
在一个像素点周围的邻域上操作,而不是单个点。一半来说是方形邻域
g(x,y)是处理后的像素,w(s,t)是周围邻域各个像素点的权重。f(x+s,y+t)是f(x,y)的邻域像素
简单邻域操作
Min:邻域中最小像素值填充像素。
Max:邻域中最大像素值填充像素。
Median:邻域平均像素值填充像素。
常见滤波器
均值滤波器
卷积核都是:1/邻域像素总数。也就是中间像素取邻域像素的平均值。
可以使得图像更加平滑,但是会丢失细节。
均值滤波起到平滑作用,对椒盐噪声非常差。
带权重平滑滤波器
越接近中间像素,权重越高。卷积核随着移动而改变。
中值滤波
中间点像素取邻域像素的中值。
中值滤波对椒盐噪声有较好的效果。
滤波器的边界丢失问题
产生原因
应为滤波器也是一个nxn大小的方格,若与图像边界对齐,则处理的时候,无法处理边界的像素,导致边界像素丢失。
3x3卷积核会丢失1圈边界像素,5x5会丢失2圈边界像素,7x7会丢失3圈边界像素,9x9会丢失4圈边界像素,nxn会丢失 (n/2)向下取整 圈边界像素
解决方法
忽略缺失的像素
填充图像
复制边界像素
裁剪图像
锐化空间滤波器
作用
可以去除图像中的模糊。
突出边界。
衡量像素变化的方法
使用一阶导数
缺陷:当前像素只与前一个像素比较。
使用二阶导数
拉普拉斯算子
优点
各向同性
简单
使用拉普拉斯算子处理的图像 与 原图相加 可以将原图边界突出,实现锐化。
具体公式
简化图像增强
拉普拉斯算子变体
优点:不仅考虑四上下左右,还考虑了对角线,对边界突出效果更明显。
一阶导数变化滤波器(Sober算子)
衡量x方向和y方向上的变化
梯度
使用梯度作为衡量像素变化标准
在实际应用中,可以简化为
Gx表示的是上下方向的变化
Gy表示的是左右方向的变化。
Gx=(z7+2z8+z9)-(z1+2z2+z3)
Gy=(z3+2z6+z9)-(z1+2z4+z7)
一阶导数与二阶导数比较
1阶导数产生的边缘更粗,2阶导数算子产生的细节更多。
1阶导数对灰度阶梯反应更强;2阶导数反应的是变化后的起伏,变化幅度不一致才有响应,对灰度变化强烈的地方很敏感。
频域滤波
傅里叶变换
一维
正变换
连续
离散
反变换
连续
离散
幅度谱
相位谱
二维
正变换
连续形式
离散形式
反变换
连续形式
离散形式
幅度谱
相位谱
能量谱
图像处理使用傅里叶变换过程
转换到频域,在频域进行滤波处理,转换回空域
使用低通滤波器处理得到如下效果,因为低通滤波器只允许低频信息通过,对于边缘这些高频信息都给丢弃了,所以图像变化幅度大的地方丢弃了。
使用高通滤波器处理,因为高通滤波器只允许高频信息通过,所以只保留了边缘
频域滤波
基本表达式
F(u,v)是图像在频域的表示,H(u,v)是滤波变换函数
理想低通滤波器
低通表达式
频域高于阈值D0的设置为0,频率低于阈值D0的设置为1。允许小于于阈值的频率通过。
高通表达式
大于阈值的设置为1,小于阈值的设置为0,允许大于阈值的频率通过。
低通不同阈值的效果
阈值相当于一个圆,半径越大,允许通过的信息越多,高频信息也就越多。对于不同的半径效果如下图所示。
高通不同阈值效果
缺点
理想低通滤波器有震铃效果,就是图像中类似于水波纹的东西。
巴特沃苏滤波器
低通表达式
高通表达式
低通不同阈值的效果图
高通不同阈值的效果
优点
没有震铃效果,从图中看出,震铃效果没有了,无法看见类似水波纹的东西。
高斯滤波器
低通表达式
高通表达式
低通不同阈值效果
高通不同阈值效果
优点
具有平滑性
三种滤波器使用半径15进行低通滤波效果比较
对比可以看出,高斯低通滤波器的过渡很平坦。
低通滤波器的应用
因为低通滤波器可以过滤高频信息,可以用于修图对人脸皮肤进行美化。
高斯低通滤波器因为其平滑特性,可以处理图片中文字断裂的情况。
拉普拉斯频域滤波器
表达式
效果
反锐化掩模
表达式
f'hp(x,y)=f(x,y)-flp(x,y)
通过减去原图像的模糊图像就可以得到,原图像的模糊图像就是使用低通滤波器去除高频细节的图像,减去其即可。
高增溢滤波
表达式
fhb(x,y)=Af(x,y)-flp(x,y)
将原图像增强A倍,再减去原图像的模糊图像。
与其原图的高频图像的关系
等于原图像的A-1倍加上原图经过高通滤波器处理的图像,推导如下:
fhb(x,y)=Af(x,y)-flp(x,y)=(A-1)f(x,y)+f(x,y)-flp(x,y)=(A-1)f(x,y)+fhp(x,y)
高频增强滤波
表达式
Hhfe(u,v)=a+bHhp(u,v)
a>0,且b>a。
频域滤波的优点
计算速度快,尤其是大图片。
彩色图像增强
色彩模式
RGB:红蓝绿三原色。
HSI:H(Hue,色调),S(Saturation,饱和度),I(Intensity,亮度)。
CMYK:C(Cyan,青色),M(Magenta,品红色),Y(Yellow,黄色),K(Black,黑色,用K是为了避免与Blue搞混)。
YUV:本质是RGB空间,只不过对RBG做了约束。亮度信号Y=aR+bG+cB,色差分量信号U=R-Y,色差分量信号V=B-Y。
YCbCr:YCbCr模型来源于YUV。
YCbCr采样
全采样YUV 4:4:4
每个像素的三个分量信息完整。
原始:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
采样:Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
映出:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
YUV 4:2:2采样
每个色差信道只取二分之一。交叉采样
原始:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
采样:Y0 U0 Y1 V1 Y2 U2 Y3 V3
映出:[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2 V3]
YUV 4:1:1采样
每个色差信道只取四分之一。交叉采样
原始:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
采样:Y0 U0 Y1 Y2 V2 Y3
映出:[Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]
YUV 4:2:0采样
指的是每行4:2:0与4:0:2交叉采样
原始:
[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
[Y5 U5 V5] [Y6 U6 V6] [Y7 U7 V7] [Y8 U8 V8]
采样:
第一行(第三个色差信道不取)4:2:0,Y0 U0 Y1 Y2 U2 Y3
第二行(第二个色差信道不取)4:0:2,Y5 V5 Y6 Y7 V7 Y8
映出:
然后分别组合
[Y0 U0 V5] [Y1 U0 V5] [Y2 U0 V7] [Y3 U0 V7]
[Y5 U0 V5] [Y6 U0 V5] [Y7 U2 V7] [Y8 U2 V7]
彩色图像处理
强度切片
表达式
C1,C2分别是两种不同的颜色,将大于强度T的用C1颜色表示,小于强度T的用C2颜色表示
多级强度切片
表达式
不同强度级别的图像用不同颜色表示
灰度到颜色转换
根据特定映射函数,为每个灰度级赋予指定颜色,不同颜色在灰度级上变化不同。最后组合起来
全彩色图像处理
分别单独处理每个色彩通道,每个彩色通道权重不同。最后合并。
RGB图像
HSI
CMY
彩色图像平滑
对于RGB,CMY图像,在每个通道上,对每个像素点根据其邻域求均值,最后合并。
对于HSI图像,只对强度I平滑,而不管H和S。
彩色图像锐化
对于RGB,CMY图像,在每个通道上,单个处理每个像素
对于HSI图像,只处理强度I通道上的像素,其余不管。
RGB和HSI:
彩色图像的噪声
噪声可以出现在彩色图像的每个通道上。
相对于灰度图像,彩色图像的噪声并不明显。
色彩白平衡(Color banlancing)
经典算法
Gray-world
Scal-by-max
Shades-of-gray
本文来自博客园,作者:Laplace蒜子,转载请注明原文链接:https://www.cnblogs.com/RedNoseBo/p/17300653.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律