数字图像处理三-亮度变换(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dengxiayigetaishan/article/details/52751901

这篇文章主要讲解图像的亮度变换的基本原理,通过对图像的每个像素值进行函数映射 G(x,y)=T(F(x,y));这里主要介绍matlab中的rgb2gray函数和imadjust函数以及函数数学原理

rgb2gray

rgb2gray函数用法: I =rgb2gray(RGB);是把RGB图像转变成灰度级图像

I = imread('by.jpg');
f = rgb2gray(I);
subplot(121);
imshow(I);
subplot(122);
imshow(f);


函数的数学原理:
以R、G、B为轴建立空间直角坐标系,则RGB图的每个象素的颜色可以用该三维空间的一个点来表示,而Gray图的每个象素的颜色可以用直线R=G=B上的一个点来表示。
于是rgb转gray图的本质就是寻找一个三维空间到一维空间的映射,最容易想到的就是射影(即过rgb空间的一个点向直线R=G=B做垂线),事实上Matlab也是这样做的,
并且有Gray = 0.29900 * R + 0.58700 * G + 0.11400 * B。灰度可以说是亮度(luminance)的量化值,而RGB的定义是客观的三个波长值,转换时需要考虑人眼对
不同波长的灵敏度曲线所以系数不相等。

imadjust

imadjust函数的用法:调节灰度图像的亮度或彩色图像的颜色矩阵
(1)、J = imadjust(I)
将灰度图像 I 中的亮度值映射到 J 中的新值并使 1% 的数据是在低高强度和饱和,这增加了输出图像 J 的对比度值。

(2)、J = imadjust(I,[low_in; high_in],[low_out; high_out])
将图像I中的亮度值映射到J中的新值,即将low_in至high_in之间的值映射到low_out至high_out之间的值。low_in 以下与 high_in 以上的值被剪切掉了,也就是说,low_in 以下的值映射到 low_out,high_in 以上的值映射到high_out。它们都可以使用空的矩阵[],默认值是[0 1]。

(3)、J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)
将图像 I 中的亮度值映射到 J 中的新值,其中 gamma指定描述值I和值J关系的曲线形状。如果gamma小于1,此映射偏重更高数值(明亮)输出,如果gamma大于1,此映射偏重更低数值(灰暗)输出,如果省略此参数,默认为(线性映射)。 

(4)、newmap = imadjust(map,[low_in; high_in],[low_out; high_out],gamma)
调整索引色图像的调色板map。如果low_in, high_in, low_out, high_out 和 gamma 都是标量,那么对 r,g,b 分量同时都做此映射。对于每个颜色分量都有唯一的映射,当 low_in 和 high_in 同时为1*3向量或者 low_out 和 high_out 同时为1*3向量或者 gamma 为1*3向量时。调整后的颜色矩阵 newmap 和 map 有相同的大小。

(5)、RGB2 = imadjust(RGB1,...)
对 RGB 图像 RGB1 的红、绿、蓝调色板分别进行调整。随着颜色矩阵的调整,每一个调色板都有唯一的映射值。

I = imread('by.jpg');
f = rgb2gray(I);
g = imadjust(f,[0.2,0.8],[]);
subplot(121);
imshow(f);
subplot(122);
imshow(g);


数学原理:例如:图像数据为unit8类(0-255),gamma=1时,图像f中某一点像素值x经过变换后,得到图像f1的对应的像素值xf满足下面公式:

xf = imadjust(f, [x1,y1],[x2,y2]);


当gamma不等于1的情况,暂时不清楚。


猜你喜欢

转载自blog.csdn.net/dengxiayigetaishan/article/details/52751901