python rgb输入变换_图像算法原理与实践——单通道变换

一、色彩基础数学理论

对于灰度图像,我们可以使用3D坐标系来形象的描述整个图像所有像素值。使用X-Y-Z三维坐标来表示图像信息,其中 X-O-Y平面表示图像的本身的平面,Z轴的值是对应像素点的颜色值,使用二元函数表达式可以方便的表达函数的 z=f(x,y),其中x表示横轴像素坐标位置,y表示是纵轴像素坐标位置,z表示对应像素点的灰度值。在实际应用场景中,(x,y)是离散的像素点,当我们将x和y的坐标位置进行归一化,同时将像素灰度值z进行归一化处理后,再来看归一化后的连续3D灰度坐标系,可以发现整个坐标系非常类似一个山丘的坐标图。山丘的平地就相当于纯黑色像素点,山峰就相当于亮度比较高的像素点,山谷就相当于灰度值比较小亮度比较暗的像素点,通过这样的3D坐标系,我们可以清楚地将图像像素内容形象化的表达出来。

目前大部分的基础算法和空域算法都是对各个像素的灰度值进行变换处理。例如:调节亮度的处理就是 z’= z * 1.2 或者 z’= z * 0.8,直接调节像素的灰度值即可。而对于RGB色彩空间的处理,也是采用同样的处理方式,只是将R、G、B各个通道分别单独处理即可。同理,在RGB色域空间调节一个彩色图像的亮度,可以使用相同的方法:

R’= R * 1.2; G’= G * 1.2; B’= B * 1.2; 变换后生成的 (R’, G’, B’)的颜色值就是调亮后的彩色图像。

28b15eaecc0dad5521ba0a87823cdd3c.png
灰度图像原始图像

795950687156c9a6c7c3a7bbc78093df.png
RGB原始图像

57ce46d36dfa1578ba45b5cf91aa12c8.png
灰度图像的3D坐标系

二、图像反色

所谓图像反色,就是将原先图像将原先的颜色使用相反的色彩来替换。例如:纯黑色使用纯白色替换; 深灰色色使用浅灰色来替换。对于归一化的颜色值,其最大值是1.0,那么对应的反色值就是 (1.0 - color),因此各个反色值计算:

d16ac4774da679599ad43a5299345d27.png
归一化值的反色计算公式

而在实际开发中我们的灰度值或者R、G、B通道值都是使用单个字节来表示,也即每个通道颜色值的正常表示范围是[0, 255],因此我们在实际开发中使用的反色公式

c71f7b6cd674fc7756fb4f95cc566605.png
针对单通道1字节的反色公式

对应的变换代码

//
// 功能:进行单通道反色变换,对于RGB彩色颜色值,各个通道分别调用该函数
// 输入: nInputData : 单通道颜色值,值在[0, 255]
// 返回: 变换后的颜色值,值在[0, 255]
//
uint8_t Trans_Reverse(uint8_t nInputData)
{
    
  // 归一化输入的颜色值  
  double fInData = (double)nInputData / 255.0;

  // 进行反色变换
  double fTransVal = 1.0 - fInData;
    
  // 将变换后的值重新还原到 [0, 255] 区间
  fTransVal = MIN( MAX(0, fTransVal ), 1.0);  
  uint8_t nRetVal = (uint8_t)(fTransVal * 255);

  return nRetVal;
}  

uint8_t Trans_ReverseFast(uint8_t nInputData)
{
    
  // 直接反色变换,这个计算最快
  return (255-nInputData);
}  

变换后的效果

d2c8022dc975e41090f6bc03478832ac.png
反色后的灰度图像

823d19b00581b1debb11d70adebe0de0.png
反色后的RGB图像

三、对数变换

对数变换可以调节图像中低灰度值范围 或者 高灰度 值范围,使得低(高)灰度值范围更宽一些,这样可以将图像中 较暗区域(低灰度值范围)或者 较亮区域(高灰度值范围)的细节进行增加,将相关区域的细节更好的表现出来。对数变换是使用如下的变换公式:

64874108cf3dffb1bf9f0f212eea472e.png
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值