OpenCV——图像灰度变换
创始人
2025-05-28 13:11:19

文章目录

  • 图像灰度变化
      • 图像点运算
      • 线性点运算
      • 灰度的非线性变换:对数变换
      • 灰度的非线性变换:伽马变换
      • 灰度的非线性变换:对比拉伸
      • 灰度的非线性变换: S形灰度变换
      • 灰度的非线性变换:阈值变换
      • 灰度的非线性变换:灰度切割

图像灰度变化

图像点运算

定义:

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

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

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

图像的点运算包括:

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

非线性变换例子:

#1、导入包
import cv2
import numpy as np
import math
import matplotlib.pyplot as plt#2、读入图片
gray_img = cv2.imread('spine.tif',0)
cv2.imshow('gray_img',gray_img)
cv2.waitKey(0)
cv2.destroyAllWindows()#3、构造跟原图同样大小的零值图,用于保存分段线性变换结果
piecewise_linear_img = np.zeros((gray_img.shape[0],gray_img.shape[1]),np.uint8)#4、设置分段线性函数参数
r1,s1 = 40,100
r2,s2 = 200,250
k1 = s1/r1
k2 = (s2-s1)/(r2-r1)
k3 = (255-s2)/(255-r2)#5、便利图像每个像素,按公式进行变换
for i in range(gray_img.shape[0]):for j in range(gray_img.shape[1]):if gray_img[i,j] <= r1:piecewise_linear_img[i,j] = k1*gray_img[i,j]elif r1 <= gray_img[i,j] <= r2:piecewise_linear_img[i,j] = k2*(gray_img[i,j]-r1) + s1else:piecewise_linear_img[i,j] = k3*(gray_img[i,j]-r2) + s2#6、构造跟原图同样大小的零值图,用于保存伽马变换的结果
gamma_img = np.zeros((gray_img.shape[0],gray_img.shape[1],1),dtype=np.float32)#7、遍历图像每个像素值,按公式进行变换
for i in range(gray_img.shape[0]):for j in range(gray_img.shape[1]):gamma_img[i,j] = math.pow(gray_img[i,j],0.5)
cv2.normalize(gamma_img,gamma_img,0,255,cv2.NORM_MINMAX)#将伽马变换后的图像像素值统一到0-255
cv2.convertScaleAbs(gamma_img)#将图片转换为uint8类型#显示变换结果,进行效果对比
plt.subplot(321),plt.imshow(gray_img,'gray'),plt.title('srcImg')#plt.subplt(321)指一个三行两列的图从左到右从上到下的第一个位置
plt.subplot(322),plt.hist(gray_img.ravel(),256,[0,256]),plt.title('Histogram'),plt.xlim([0,256]) #plt.hist直方图,ravel()方法将矩阵拉成一维数组
plt.subplot(323),plt.imshow(piecewise_linear_img,'gray'),plt.title('piecewise_linear')
plt.subplot(324),plt.hist(piecewise_linear_img.ravel(),256,[0,256]),plt.title('Histogram'),plt.xlim([0,256])
plt.subplot(325),plt.imshow(gamma_img,'gray'),plt.title('gamma_img')
plt.subplot(326),plt.hist(gamma_img.ravel(),256,[0,256]),plt.title('Histogram'),plt.xlim([0,256])
plt.tight_layout()

在这里插入图片描述

线性点运算

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

  • aaa 控制对比度(不同级别灰度的明暗差异):
    • a > 1,对比度变大;
    • a < 1,对比度变小。
    • a 为负值,实现负片效果
  • bbb 控制输出图像的整体亮度:
    • b > 0 增大亮度
    • b < 0 则减小亮度
import cv2 as cv# 线性变换
def linear(img,a,b):"""s =f(r)=ar+b"""r = np.copy(img)s = a*r+breturn s
if __name__=="__main__":img = cv.imread("3.png")img = cv.cvtColor(img,cv.COLOR_RGB2GRAY)# 调节 a,b值观察图像变化a = 1b = 255re_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()

在这里插入图片描述
灰度的线性变换不利于突出感兴趣区域,且容易出现饱和、截止等情况。

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

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

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

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

伽玛变换又称为 指数变换 或 幂次变换,是另一种常用的灰度非线性变换。 s=crγ,c≥0,γ≥0;实际使用公式:s=255×(r255+eps)γs = cr^\gamma ,c\geq0,\gamma\geq0;\ 实际使用公式:s = 255\times(\frac{r}{255+eps})^\gamma s=crγ,c≥0,γ≥0; 实际使用公式:s=255×(255+epsr​)γ

epsepseps 为补偿系数(一般为0),γ\gammaγ 为伽马系数
当γ<1\gamma<1γ<1 时,低亮度区域对比度增强
当γ>1\gamma>1γ>1 时, 高亮度区域对比度增强
当γ=1\gamma=1γ=1时,该灰度变换是线性的,此时通过线性方式改变原图像。

不同γ\gammaγ值的变换曲线如下图所示:
在这里插入图片描述

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

在这里插入图片描述

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

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

# 非线性变化:对比拉伸
def constr(img):"""s = 0.2*r  r<90s = 3*r    90 90 and r[i][j] < 160:r[i][j] *= 3if r[i][j] > 160:r[i][j] *= 0.8return r

在这里插入图片描述

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

S 形灰度变换曲线,降低较亮和较暗部分的对比度,加强中间灰度级物体对比度: s=25521+1sin(aπ2)sin[aπ(r255−12)]s = \frac{255}{2}{1+\frac{1}{sin(a\frac{\pi}{2})}sin[a\pi(\frac{r}{255}-\frac{1}{2})]} s=2255​1+sin(a2π​)1​sin[aπ(255r​−21​)] S 形灰度变换曲线,加强较亮和较暗部分的对比度,降低灰度级中间物体对比度: s=25521+1tan(aπ2)tan[aπ(r255−12)]s = \frac{255}{2}{1+\frac{1}{tan(a\frac{\pi}{2})}tan[a\pi(\frac{r}{255}-\frac{1}{2})]} s=2255​1+tan(a2π​)1​tan[aπ(255r​−21​)]

在这里插入图片描述

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

阈值变换可以将灰度图像转换成黑白二值图像,用户指定一阈值T,灰度低于T置0,高于T置255。 s={0,r0,​r

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

在这里插入图片描述

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

灰度切割(灰度分层):突出感兴趣灰度范围
在这里插入图片描述

相关内容

热门资讯

特朗普关税被法院叫停,风险资产... 蒋立冬 派生万物AI 图特朗普关税“被叫停”后,亚洲股市应声走高。截至5月29日收盘,日经225指数...
图神经网络之CNN与GCN的联... 一、CNN(Convolutional Neural Network)卷...
DJ2-2 Web应用和HTT... 目录 1. Web 和 HTTP 常用术语 2. HTTP 概述 3. TCP 和 HTTP 4. ...
nginx-http-1 HTTP介绍 HTTP协议是Hyper Text Transfer Protocol(...
V观财报|“四连板”均瑶健康:...   中新经纬5月29日电 29日,均瑶健康再发股票交易异常波动公告。  公告显示,均瑶健康于5月28...
OceanMind海睿思受邀参... 近日,由江苏省工业和信息化厅、宜兴市人民政府指导,宜兴市工业和信息化局、...
SpringBoot Rabb... SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见。 程序员每天的C...
为了赶走烂物业,我被举报到纪委... 我本是为了维护自身权益,试图赶走那令人不满的烂物业。然而,未曾想此举竟让我陷入了意想不到的境地。不知...
*ST围海:签订1.82亿元重... 新京报贝壳财经讯 5月29日,*ST围海公告,公司与文成县水利发展有限公司签署了“文成县城防洪提升工...
宇树回应更名“股份有限公司” ... 5月29日,有消息称,宇树科技向合作伙伴发布通知称,因公司发展需要,杭州宇树科技有限公司即日起名称变...
美股七巨头交出超预期一季报:提... 围绕关税和AI(人工智能)两大话题,美股科技“七巨头”发布了基本超出预期的一季报。近日,美股科技“七...
LuaJIT 常量数组(con... 从LuaJIT Bytecode介绍中可知道,Bytecode关于常量操作的指令均为D...
js 数组中的对象去掉重复的对...  id相同的,保留第一个,其它的删除this.defaultFileLi...
许昌,几线城市?请看2025年... 第一财经·新一线城市研究所 5月28日发布 《2025新一线城市魅力排行榜》 在中国内地337座地级...
拼多多股价波动:牺牲短期业绩,... 5月27日晚,拼多多最新一季度财报发布,营收约957亿人民币,同比增长10%,已经是最近几个季度的最...
额度放开了,再选一遍美债基金~ 转自:懒猫的丰收日 最近,好多美债基金放开了额度, 也有不少小伙伴问美债基金,那就再筛一遍,大概是这...
广州农商银行:唤醒农村沉睡资源... 随着乡村振兴战略的深入实施,农村“三块地”——耕地、宅基地和集体经营性建设用地的改革与盘活,正在成为...
中国艾欧智能团队远程操控机器人... 在2025年度ICRA双臂机器人能力边界挑战赛上,深圳艾欧智能公司凭借其卓越表现,从全球88支参赛队...
同仁堂资本新局 拆分上市在下什... 暌违十多年的资本运作。 《投资者网》蔡俊 暌违十多年,同仁堂(600085.SH,下称“公司”)...
集中上市!增量资金来了 增量资金持续驰援市场,新发ETF密集上市。5月以来,23只ETF上市,9只ETF即将上市,这些ETF...
3.类型、存储和变量 目录 3.1 C#程序是一组类型声明  3.2 类型是一种模板  3.3 实例化类型  3.4 数...
圆通速递今日大宗交易折价成交7... 5月29日,圆通速递大宗交易成交795万股,成交额1.01亿元,占当日总成交额的15.22%,成交价...
最新!宇树科技改名了 证券时报消息,5月29日,宇树科技向合作伙伴发布通知称,因公司发展需要,杭州宇树科技有限公司即日起名...
持续改进与回归 系列文章目录 第一章 敏捷核心知识点 第二章 敏捷宣言与原则 第三章 价值驱动交付-优先级排序&增量...
ST先锋:6月3日起撤销其他风... 5月29日晚间,宁波先锋新材料股份有限公司(ST先锋,300163.SZ)公告,公司股票将于5月30...
双指针 -876. 链表的中间... 开始一个专栏,写自己的博客 双指针,也算是作为自己的笔记吧!...
100%原价买飞天茅台!茅台机... 红星资本局5月29日消息,遵义茅台机场官微发布消息,5月30日-6月30日期间,茅台机场开启2个乘机...
restTemplate未设置... 背景 昨天发版遇到个线上问题,由于运维操作放量时隔离机器过多,导致只有大...
第一批痴迷中古的年轻人,已经袪... 第一批痴迷中古的年轻人,曾如朝圣般追寻那些古老的物件与文化。他们沉浸在中古的世界里,仿佛找到了心灵的...
公司的经销商去年为何减少400... 新京报贝壳财经讯(记者阎侠)5月29日,记者自酒鬼酒发布的投资者关系活动记录表获悉,公司正面临行业环...