图像增强
Posted RedNoseBo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像增强相关的知识,希望对你有一定的参考价值。
两类图像增强方法
空域:直接对像素操作
频域:傅里叶变换,小波变换
空域
图像灰度级分布特点
对比度越高,灰度级在空间内分布更加均匀。
直方图均衡化
计算步骤
原始图像直方图 -> 累积概率分布直方图 -> 均值化后的直方图
核心:将累积概率分布的值 以为总灰度级个数对其进行近似划分,然后计算落在每个灰度级的原始灰度级概率分布总和。
计算灰度级概率分布
参数说明
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
强度变换
对数变换
数学公式
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阶导数反应的是变化后的起伏,变化幅度不一致才有响应,对灰度变化强烈的地方很敏感。
本文来自博客园,作者:Laplace蒜子,转载请注明原文链接:https://www.cnblogs.com/RedNoseBo/p/17300653.html
数字图像处理Matlab实现-图像增强-彩色图像增强(彩虹编码,热金属编码)
伪彩色处理
伪彩色增强:把一幅黑白域图像的不同灰度级映射为一幅彩色图像的技术手段。
伪彩色增强有很多种方法,而下面的增强方法则是使用的空间域灰度级-彩色变换法。
空间域灰度级-彩色变换法:可以将灰度图像变为具有多种颜色渐变的连续彩色图像,变换后的图像视觉效果较好,主要色相是将灰度图像f(x,y)送入具有不同变换性质的红、绿、蓝3个变换器,相对应的产生3个不同的输入fR(x,y),fG(x,y),fB(x,y)将它们对应地作为彩色图像的红绿蓝三个色彩分量合成一副彩色图像。
彩虹编码和热金属编码是其中的两种变化函数。
彩虹编码
`Image1=imread(\'lotus.bmp\');
%转换为灰度
gray=rgb2gray(Image1);
[h,w]=size(gray);
%新图像的矩阵
NewImage3=zeros(h,w,3);
for x=1:h
for y=1:w
if gray(x,y)<96
NewImage3(x,y,1)=0;
elseif gray(x,y)<128
NewImage3(x,y,1)=255(gray(x,y)-96)/32;
else
NewImage3(x,y,1)=255;
end
end
end
for x=1:h
for y=1:w
if gray(x,y)<32
NewImage3(x,y,2)=0;
elseif gray(x,y)<64
NewImage3(x,y,2)=255(gray(x,y)-32)/32;
elseif gray(x,y)<128
NewImage3(x,y,2)=255;
elseif gray(x,y)<192
NewImage3(x,y,2)=255(192-gray(x,y))/64;
else
NewImage3(x,y,2)=255(gray(x,y)-192)/64;
end
end
end
for x=1:h
for y=1:w
if gray(x,y)<32
NewImage3(x,y,3)=255gray(x,y)/32;
elseif gray(x,y)<64
NewImage3(x,y,3)=255;
elseif gray(x,y)<96
NewImage3(x,y,3)=255(96-gray(x,y))/32;
elseif gray(x,y)<192
NewImage3(x,y,3)=0;
else
NewImage3(x,y,3)=255*(gray(x,y)-192)/64;
end
end
end
imshow(NewImage3),title(\'彩虹编码\')
`
处理结果
热金属编码
`Image1=imread(\'lotus.bmp\');
%转换为灰度
gray=rgb2gray(Image1);
[h,w]=size(gray);
%新图像的矩阵
NewImage4=zeros(h,w,3);
for x=1:h
for y=1:w
if gray(x,y)<64
NewImage4(x,y,1)=0;
elseif gray(x,y)<128
NewImage4(x,y,1)=255(gray(x,y)-64)/64;
else
NewImage4(x,y,1)=255;
end
end
end
for x=1:h
for y=1:w
if gray(x,y)<128
NewImage4(x,y,2)=0;
elseif gray(x,y)<192
NewImage4(x,y,2)=255(gray(x,y)-128)/64;
else
NewImage4(x,y,2)=255;
end
end
end
for x=1:h
for y=1:w
if gray(x,y)<64
NewImage4(x,y,3)=255gray(x,y)/64;
elseif gray(x,y)<96
NewImage4(x,y,3)=255;
elseif gray(x,y)<128
NewImage4(x,y,3)=255(128-gray(x,y))/32;
elseif gray(x,y)<192
NewImage4(x,y,3)=0;
else
NewImage4(x,y,3)=255*(gray(x,y)-192)/64;
end
end
end
imshow(NewImage4),title(\'热金属编码\')
`
处理结果
————————————————
版权声明:本文为CSDN博主「SKY_FISHSKY_FISH」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/SUMMER_RAINOW/article/details/115773441
以上是关于图像增强的主要内容,如果未能解决你的问题,请参考以下文章