计算两幅图像的gamma曲线_数字图像处理---灰度变换

344206abbf5e6242fba863487581f264.png

图像点运算

定义:

对图像中的每个像素进行灰度变换运算。
输出图象每个象素点的灰度值仅由输入图像相同位置象素点的灰度值决定。

设输入图像和输出图像在$(x,y)$处的灰度值分别是 $r$ 和 $s$,则点运算可表示为 $s = T(r)$,$T$ 表示输入图像与输出图像像素的灰度映射关系。

运算的用途:实现对比度增强等。

图像的点运算包括:

  • 灰度变换
    • 线性变换
    • 非线性变换(对数变换、伽马变换、阈值变换,分段线性变换等)
  • 位图切割

线性点运算

输出输入的灰度值成线性函数关系:$s =f(r)=ar+b$

  • $a$ 控制对比度(不同级别灰度的明暗差异):
    • a > 1,对比度变大;
    • a < 1,对比度变小。
    • a 为负值,实现负片效果
  • b 控制输出图像的整体亮度:
    • b > 0 增大亮度
    • b < 0 则减小亮度

Code

import cv2 as cv

# 线性变换
def linear(img,a,b):
    """
    s =f(r)=ar+b
    """
    r = np.copy(img)
    s = a*r+b
    return s
if __name__=="__main__":
    img = cv.imread("3.png")
    img = cv.cvtColor(img,cv.COLOR_RGB2GRAY)
    # 调节 a,b值观察图像变化
    a = 1
    b = 255
    re_img = linear(img,a,b)
    cv.imshow('img',img)
    cv.imshow('re_img,a={},b={}'.format(a,b),re_img)
    cv.waitKey(0)
    cv.destroyAllWindows()

56bf55f4835f901b3fe9cb9ee1667be0.png

d8c8cccbb16c868fbae64340febb9940.png

灰度的线性变换不利于突出感兴趣区域,且容易出现饱和、截止等情况。

灰度的非线性变换:对数变换

灰度的线性变换不利于突出感兴趣区域,且容易出现饱和、截止等情况。解决办法是对进行非线性变换。

灰度对数变换:可增强暗部细节: $$ s = clog(1+r) c为常数,建议值c = 255/log(256) $$ 灰度反对数变换:可增强亮部细节: $$ s = exp(r/c) - 1 $$

灰度的非线性变换:伽马变换

伽马变换又称为 幂律变换: $$ s = cr^gamma ,cgeq0,gammageq0; 实际使用公式:s = 255times(frac{r}{255+eps})^gamma $$

$eps$ 为补偿系数(一般为0)
$gamma$ 为伽马系数
$gamma<1$ 时,低亮度区域对比度增强
$gamma<1$ 时, 高亮度区域对比度增强

Code

# 非线性变化:γ变换
def gamma(img,gamma):
    """
    s = c * r^gamma
    """
    r = np.copy(img)
    s = np.power(r/255,gamma)

    return s

a8c56dd2849589a24398038bb4e4a81f.png

746a8a0b97f78afa0fb856e465cea17e.png

灰度的非线性变换:对比拉伸

在实际应用中,为了突出图像中感兴趣的研究对象,常常要求增强某一灰度范围的对比度,或对不同范围的灰度值进行不同的处理,即分段线性拉伸分段线性拉伸是仅将某一范围的灰度值进行拉伸,而其余范围的灰度值实际上被压缩了。

33cb21cfbd93d5d9f46e41d66ac05b45.png

Code

# 非线性变化:对比拉伸
def constr(img):
    """
    s = 0.2*r  r<90
    s = 3*r    90<r<160
    s = 0.8*r  其他
    """
    r = np.copy(img)
    row,col = r.shape
    for i in range(row):
        for j in range(col):
            if r[i][j] < 90:
                r[i][j] *=0.2
            if r[i][j] > 90 and r[i][j] < 160:
                r[i][j] *= 3
            if r[i][j] > 160:
                r[i][j] *= 0.8

    return r

62c81bb518400286adb8238b7005de6c.png

灰度的非线性变换: S形灰度变换

S 形灰度变换曲线,降低较亮和较暗部分的对比度,加强中间灰度级物体对比度: $$ s = frac{255}{2}{1+frac{1}{sin(afrac{pi}{2})}sin[api(frac{r}{255}-frac{1}{2})]} $$ S 形灰度变换曲线,加强较亮和较暗部分的对比度,降低灰度级中间物体对比度: $$ s = frac{255}{2}{1+frac{1}{tan(afrac{pi}{2})}tan[api(frac{r}{255}-frac{1}{2})]} $$

e10e1de54e8951e91fc4d548af699a45.png

灰度的非线性变换:阈值变换

阈值变换可以将灰度图像转换成黑白二值图像,用户指定一阈值T,灰度低于T置0,高于T置255。 $$ s = begin{cases} 0,& r<T 255,& rgeq T end{cases} $$ 通过阈值变换有助于进行图像分割。

Code

# 非线性变化:阈值变换
def threshold(img,T):
    r = np.copy(img)
    r[r>T] = 255
    r[r<T] = 0

    return r

934e128f1717e062e4c4ae690ad84dd4.png

灰度的非线性变换:灰度切割

灰度切割(灰度分层):突出感兴趣灰度范围

0e11ac4a731ffb3e1e7f7c1853336ae1.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值