前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数字图像处理灰度变换之线性变换及python实现

数字图像处理灰度变换之线性变换及python实现

作者头像
Minerva
发布2020-05-25 16:45:18
3.5K0
发布2020-05-25 16:45:18
举报

首先介绍术语空间域:指在图像平面本身,对图像每个像素直接进行计算处理。灰度变换也称亮度变换,顾名思义,该处理改变图像的亮度,一般与图像增强操作相关,灰度变换可以改变图像的质量和亮度的对比度。常见的灰度变换函数包括: 线性函数 (图像反转) 对数函数:对数和反对数变换 幂律函数:n次幂和n次开方变换

线性变换

函数定义为:s = T(r) 其中,T是灰度变换函数;r是变换前的灰度;s是变换后的像素。 线性变换方程:Y=kx+b 其中,y是变换后的灰度值,x是变换前的灰度值。 当K>1,则线性变换会加大灰度之间的对比度, 0<K<1则会减小对比度,这个是直线方程的特点。 通过改变这k和b两个变量的值,来调整图像变换的结果。但是,有时候可能并不想将整个图像的灰度值采用相同的直线方程进行变换,这时候,可以对图像进行分段,进行分段线性变换。将感兴趣的区域与别的区域对比度增大,将其他区域的对比度压缩。分段线性变换就是将灰度值分为几个区域,每个区域采用一个直线方程进行变换。与不分段的线性变换原理是一样的。 假定原图像f(x,y)的灰度范围为[a,b],变换后图像g(x,y)灰度扩展为[c,d],则根据线性方程式可以得到:

通过上式可以把图像某个亮度值区域[a,b]扩展到[c,d]。采用等例线性灰度变换对图像每一个像素做线性灰度拉伸,将有效地改善图像效果。图像反转的实现是比较简单的,在OpenCV中有对Mat的运算符重载,可以直接Mat r = 255 - img或者~img来实现。 Python实现代码如下:

代码语言:javascript
复制
import cv2
import numpy as np
def linear_transform(src,c = 0,low=0,high=1,bottom=0,up=1):
    assert high >= low and high >= 0 and high <= 1 and low >= 0 and low <= 1
    assert up > bottom and up >= 0 and up <= 1 and bottom >= 0 and bottom <= 1

    dst = np.zeros_like(src).astype(np.float32)
    dst = (up - bottom) / (high - low) * (src.astype(np.float32)-low) + c
    dst = np.clip(dst,0,255).astype(np.uint8)
    return dst
src = cv2.imread('/public/share/Minerva/Tools/timg.jpg')
src_out1 = linear_transform(src,c = 0,low=0.3,high=0.7,bottom=0,up=1)
cv2.imwrite('timg1.png', src_out1)
src_out2 = 255 - src
cv2.imwrite('timg2.png', src_out2)

原图(鹰眼)

线性变换后(鹰眼)

取反后(鹰眼)

分段线性变换:

分为:对比拉伸、灰度切割、位图切割

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python编程和深度学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 线性变换
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档