亮度算法的MATLAB实现
0赞
发表于 2013/6/27 16:07:20
阅读(21623)
亮度算法的MATLAB实现
1.1. 亮度算法介绍
1.1.1. 图像处理之调整亮度与对比度
很多时候,一张图像被过度曝光显得很白,或者光线不足显得很暗,有时候背景跟图像人物也观察不清楚,这个时候可以通过调节图像的两个基本属性-亮度与对比度来获得整体效果的提升,从而得到质量更高的图片。
1.1.2. 基本原理:
图像亮度本质上图像中每个像素的亮度,每个像素的亮度本质上RGB值的大小,RGB值为0是像素点为黑色,RGB都为255时像素点最亮,为白色。对比度则是不同像素点之间的差值,差值越大,对比度越明显。从直方图分析的观点来看,对比度越好的图片,直方图曲线会越明显,分布也越显得均匀。
1.2. 亮度算法实现
1.2.1. 算法流程
对比度 contrast的最佳取值范围在[0 ~ 4]
亮度 brightness的最佳取值范围在[0~ 2]之间
1) 调整图像亮度与对比度算法主要由以下几个步骤组成:
2) 计算图像的RGB像素均值– M
3) 对图像的每个像素点Remove平均值-M
4) 对去掉平均值以后的像素点 P乘以对比度系数
5) 对步骤上处理以后的像素P加上 M乘以亮度系统
6) 对像素点RGB值完成重新赋值
1.2.2. Matlab代码 IMG1 =double(rgbimg);fori = 1 : hforj = 1 : w IMG2(i,j,1) = 4 * IMG1(i,j,1); %RED Channel IMG2(i,j,2) = 4 * IMG1(i,j,2); %GREEN Channel IMG2(i,j,3) = 4 * IMG1(i,j,3); %BLUE Channleif(IMG2(i,j,1) >= 255) IMG2(i,j,1) = 255; endif(IMG2(i,j,2) >= 255) IMG2(i,j,2) = 255; endif(IMG2(i,j,3) >= 255) IMG2(i,j,3) = 255; end end end IMG2 = uint8(IMG2); %不转换为8位就无法正常显示 subplot(1,2,2); %分为1行2列的子图显示,并且在2显示调整对比度后的图 imshow(IMG2); title('Processed Image');
线性提高3倍亮度