图像增强Python,数字图像处理python代码下载
1.图像增强算法原理
图像增强算法通常用于调整亮度、对比度、饱和度、色调等。提高图像的清晰度并减少噪声。图像增强通常结合多种算法来完成上述功能。比如去除图像干涩相当于低通滤波器,增强锐度就是高通滤波器。当然,增强一幅图像主要是为最终获取的图像提供有用的信息服务。典型的算法流程包括:图像干燥、锐度(对比度)增加、灰度化、图像边缘特征获取、图像卷积、二值化等。这四个步骤往往可以通过不同的步骤来实现。后面会针对这方面进行专项实验,列出其应用场景和处理特点。
这篇文章是综合性的,是hit the floor写的。存在用于均衡、对比度增强和对比度降低的算法。
1.1基于直方图平均的图像增强
提高图像对比度有两种方法:直接和间接。直方图拉伸和直方图均衡化是常见的间接对比度增强方法。直方图拉伸可以用线性和非线性的方法实现,方法是通过对比度拉伸来调整直方图,放大前景和背景的灰度差。用这种ps的方法来提高对比度。直方图的平均利用累积函数调整灰度值,实现对比度的强调。
直方图均衡化原理:将原始图像的灰度从比较集中的某个灰度区间均匀分布到整个灰度空间,对图像进行非线性扩展,然后对图像的像素值进行分布。
算法应用场景:
1.算法的本质是重新分配图像的像素值,增加局部对比度,整体对比度变化不大。因此,将图像应用于图像的有用数据的对比度接近的原因,例如,曝光过度或曝光不足的照片可以在X射线图像中更好地显示,或者背景或前景太亮或太暗的图像非常有用。
2.当然,算法也有缺点。具体来说,如果转换图像的灰度级降低,并且一些细节减少的图像具有峰值,则处理后的对比度将变得不自然地更强。
算法的特点:
1.平均过程:直方图平均保证了图像像素映射过程中保持原有的大小关系。即亮区保持亮,暗区保持暗,只能增加对比度,不能颠倒明暗;确保像素映射函数的范围在0到255之间。累积函数是单一增长函数,范围为0到1。
2.累积分布函数的实现过程:
比较概率分布函数和累积分布函数,前者的二维图像有偏差,后者单调增加。在直方图调整过程中,作图方法
其中n是图像中像素的总和,
是当前灰度级中的像素数,L是图像中可能的灰度级总数。
我们来看看上面的公式是如何实现拉伸的。假设您有以下图像:
得到的图像统计信息如下图所示,根据统计信息完成灰度值映射。
映射的图像如下。
算法伪代码:
1.计算原始灰度图像的像素概率分布。
2.根据像素的概率分布获取图像的累积分布函数。
3.根据映射函数获取转换后的图像。
Matlab代码:
%直方图调整
I=im read(rice . png);
[高,宽]=大小(I);
图表
辅助(221)。
Im (I)%显示原始图像。
辅助(222)。
显示用于像素灰度统计的imhist(I)%原始图像的直方图;
num pixel=零(1,256);%统计灰度数,fori=1:高度forj=1:宽度共256个灰度。
numpixel(I(I,j )1)=num pixel (I ) I,j)1)1;对应于%灰度值的像素数增加1。
目标
End%计算灰度分布密度。
prob pixel=零(1,256);forI=1:256 prob pixel(I)=NumPixel(I)I)/(高度*宽度* 1.0);
End%计算累积直方图分布。
cumu pixel=zeros(1256);因为i=1:256
ifI==1 cumu pixel(I)=prob pixel(I)I;elsecumpixel(I)=cumupixel(I-1)prob pixel(I)I;
目标
调整累计分布的结束百分比
cumupixel=uint8(255。* cumupixel 0.5映射(调整)% I的灰度值
Im (I)%显示原始图像。
辅助(224)。
Imst (I)%显示原始图像的直方图。
1.2基于稀疏morning算子的图像增强
使用
平静晨算子图像增强的本质是利用图像的二阶微分对图像进行退化。在像场中,微分是尖锐的,积分是模糊的。利用二阶微分对图像进行退化,就是利用邻域像素提高对比度。opencv里也有一个平静的早晨功能,但是那个时候生成的是灰度图像,获得的边缘比较多。具体的源代码没有研究过,原理可以参考我之前的一篇文章,对《平静的早晨》做了详细的介绍。
本实验中使用的卷积核为:
1.3基于对象日志变换的图像增强
对数变换可以扩展图像的低灰度值部分,显示低灰度值部分的更多细节,压缩高灰度值部分,减少高灰度值部分的细节,从而达到强调图像低灰度值部分的目的。转换方法:
对数变换增强图像低灰度部分细节的功能可以从对数图中直观地理解:
x轴的0.4对应y轴的0.8左右,即原始图像中0~0.4的低灰度部分经过对数运算后被扩展到0~0.8,而0.4~1的整个高灰度部分被投影到只有0.8~1的区间,从而达到扩展增强低灰度部分和压缩高灰度部分值的功能。
从上图也可以看出,对于不同的基数,基数越大,低灰度部分膨胀越强,高灰度部分压缩越强。
1.4基于伽马变换的图像增强
伽马变换主要用于图像校正,对灰度过高或过低的图像进行校正,以增强对比度。变换公式是对原始图像中的每个像素值进行乘积运算:
伽玛变换对图像的校正效果,实际上是通过增强低灰度或高灰度的细节来实现的,从伽玛曲线可以直观地理解:
的值分为1。该值越小,图像低灰度部分的扩展效果越强。该值越大,图像高灰度部分的扩展效果越强。通过不同的值,可以达到增强低灰度或高灰度部分细节的效果。
在图像对比度较低,整体亮度值较高的情况下(针对相机曝光过度),伽马变换对图像增强效果明显。
第二,测试代码
根据以上解释,本文使用python进行编程实验,代码如下:
定义预处理(文件名,I):
image=cv2.imread(文件名)
image_gray=cv2.cvtColor(image,cv2。彩色_ RGB 2灰色)
#直方图均衡化增强
image _ equal=cv2 . equalize hist(image _ gray)
r,g,b=cv2.split(图像)
r1=cv2.equalizeHist(r)
g1=cv2.equalizeHist(g)
b1=cv2.equalizeHist(b)
image_equal_clo=cv2.merge([r1,g1,b1])
#平静的早晨算法增强
kernel=np.array([ [0,-1,0],
[-1, 5, -1],
[0, -1, 0] ])
image_lap=cv2.filter2D(image,cv2。CV_8UC3,内核)
#对象算法增强
image _ log=NP . uint 8(NP . log(NP . array(image)1))
cv2.normalize(image_log,image_log,0,255,cv2。NORM_MINMAX)
#转换为8位图像显示
cv2.convertScaleAbs(图像日志,图像日志)
#伽玛变换
fgamma=2 image _ gamma=NP . uint 8(NP . power((NP . array(image)/255.0),fgamma)*255.0)
cv2.normalize(image_gamma,image_gamma,0,255,cv2。NORM_MINMAX)
cv2.convertScaleAbs(图像伽玛,图像伽玛)
三。实验结果和分析
(src)(日志)
(拉普勒斯)(伽玛)
(相等)
(src)(日志)
(拉普勒斯)(伽玛)
(相等)
实验结果如下:
1.对于图像增强,对数函数的变化更容易削弱图像的对比度。毕竟函数的表达式是这样的:像素值变大,像素值变小,所以对比度降低,亮度增加,如图所示。所以目前看来还是慎用日志功能。如果对函数进行改进,可以使用分段函数。
2.伽马函数图像增强。这个函数的原理可以看出,当R大于1时,可以视为指数函数,当R小于1时,为对数函数。在实验中,我们经常使用r1来增强图像对比度。从图中可以看到,黑的更深,白的更白。
3.laplus函数图像增强本质上是差分的,所以它锐化了图像,明显突出了图像的细节,进而直观地提高了图像的对比度。
4.相等函数的本质是重新分配图像的像素值。直观上,我们发现图像的颜色发生了变化,但对比度却提高了。当然,这组图像的作用并没有体现出来。
总结:不同的图像增强方法,不同的应用领域。更好的应用需要掌握灵活的方法。
四。参考文章
1.OpenCV图像增强算法的实现(直方图均衡、平静的早晨、Log、Gamma):本文基本就是在此基础上编程实现的。原理可以参考这个,同时我详细解释一下概念上的问题。
2.直方图均衡化原理:本文详细介绍了直方图均衡化的原理,并用opencv实现。
3.直方图均衡化的详细说明和编程实现:本文分析了直方图均衡化的应用特点和不足,并根据算法原理用matlab实现了算法。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。