图像基础13 灰度变换与图像增强

学习资源《机器学习实践指南 案例应用解析》

概念

灰度变换是指根据某种目标条件按一定变换关系逐点改变源图像中每一个像素灰度值的方法。目的是为了改善画质,使图像的显示效果更加清晰。 图像的灰度变换处理是图像增强处理技术中的一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分。
采用灰度变换法对图像进行处理可以大大改善图像的视觉效果。灰度变换法可以分为线性变换和非线性变换。


对数变换

对数变换对图像的低亮度区有较大的扩展而对高亮度区进行压缩,简方之就是增强了低值灰度的图像细节,灰度非线性变换公式:

d s t = C l o g ( 1 + s r c ) dst=Clog(1+src) 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 = b c ( x − a ) − 1 y=b^{c(x-a)}-1 y=bc(xa)1

其中,参数 $b 、c $ 控制曲线的变换开关,参数 a a 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()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gtAUDFAd-1574725709440)(https://img-blog.csdn.net/20171018082622030?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHVuZGg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)]

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程圈子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值