首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

亮度对比度算法MATLAB实现

亮度对比度算法MATLAB实现

亮度对比度算法MATLAB实现1.1. 亮度+对比度-方案1:方便在图像处理中,恐怕大家最熟悉的就是对于图像的亮度和对比度调整了。
前面一定也有很多人写过这样的文章了,但是想把我的这个系列作一个完整的小结,我就再罗嗦一番了。
还是以24位色图像为例子,每种色彩都可以用0-255,一共256种深度来表示。如果我们把它画在一个二维坐标上,正好是一条直线。比如我们将像素的色深作为横坐标,输出色深作为纵坐标的画,正好是一条经过原点(0,0)的45度斜线。
那么很容易就可以写出它的直线方程:Out = In * 1 ,系数1就是对比度的概念.如果把条直线加上一个偏移量变成B,那么它的直线方程就成为:
Out = In * 1 + (ab)
偏移量(ab)就是亮度的增量。
只要有初中的代数知识就很容易看出它满足一条直线方程:Y= A * X + B。但是,我们这里要处理的情况稍微有些不同,在图像处理中,对比度和亮度要分别对待。不能因为改变而改变亮度,因为我们习惯上把灰色(127,127)这一点作为中心点。
比如,我们加大了对比度,原来的直线A就变成如直线D所表示的,在改变了对比度的同时,也增加了亮度(ab),而我们心目中的变化应该是入直线C那样。也就是说,我们把(127,127)这一点映射成了坐标系的原点。
那么我们就要把原来的直线公式修改成:Y=( X - 127 ) * A + B。A表示对比度,B表示亮度增量。我们验证一下:只要亮度增量 B=0,无论怎么改变对比度 A,该直线始终通过中心点(127,127),也就是说改变对比度的同时,亮度没有改变。
由此,我们就可以推导出颜色的对比度亮度计算公式了:
NewRed = (OldRed -127 ) * A + 127+ B
NewGreen = (OldGreen -127 ) * A + 127+B
NewBlue = (OldBlue -127 ) * A + 127+B
现在你是否已经准备着手用这个公式来写出你自己的亮度对比度子程序了呢?慢着,再多做一步吧。我们是在遍程序,不是在做初中代数考试。这多出来的一步将使你的程序的执行效率更高一些。
1.1.1. Matlab代码CONST_PARAM = 1.5;      %对比度参数BRI_PARAM = 10;          %亮度参数% -----------------------------------------------%     NewRed = (OldRed -127 ) * A + 127+ B  %     NewGreen = (OldGreen -127 ) * A + 127+B%     NewBlue = (OldBlue -127 ) * A + 127+B% -----------------------------------------------% 除去中心值127% 乘以对比度系数% 上述结果 + 平均值*亮度% IMG1 = double(IMG1);    %将图片转换为双精度类型IMG3 = zeros(h,w,3);    %定义长款位h, w的图像数组 for i = 1 : h for j = 1 : w        % Remove means        IMG3(i,j,1) = IMG1(i,j,1) - 127;        %RED Channel        IMG3(i,j,2) = IMG1(i,j,2) - 127;       %GREEN Channel        IMG3(i,j,3) = IMG1(i,j,3) - 127;      %BLUE Channle        % Adjust Contrast         IMG3(i,j,1) = IMG3(i,j,1) * CONST_PARAM;      %RED Channel        IMG3(i,j,2) = IMG3(i,j,2) * CONST_PARAM;      %GREEN Channel        IMG3(i,j,3) = IMG3(i,j,3) * CONST_PARAM;      %BLUE Channle        % Adjust Brightness        IMG3(i,j,1) = IMG3(i,j,1) + 127 + BRI_PARAM;       %RED Channel        IMG3(i,j,2) = IMG3(i,j,2) + 127 + BRI_PARAM;     %GREEN Channel        IMG3(i,j,3) = IMG3(i,j,3) + 127 + BRI_PARAM;      %BLUE Channle if(IMG3(i,j,1) >= 255)      IMG3(i,j,1) = 255;        elseif(IMG3(i,j,1) <= 0)    IMG3(i,j,1) = 0; else IMG3(i,j,1) = IMG3(i,j,1);  end if(IMG3(i,j,2) >= 255)      IMG3(i,j,2) = 255;        elseif(IMG3(i,j,2) <= 0)    IMG3(i,j,2) = 0; else IMG3(i,j,2) = IMG3(i,j,2);  end if(IMG3(i,j,3) >= 255)      IMG3(i,j,3) = 255;        elseif(IMG3(i,j,3) <= 0)    IMG3(i,j,3) = 0; else IMG3(i,j,3) = IMG3(i,j,3);  end%         IMG3(i,j,1) = 0;  %RED Channel%         IMG3(i,j,2) = 0;  %GREEN Channel%         IMG3(i,j,3) = 0;  %BLUE Channle       endendIMG3 = uint8(IMG3);  %不转换为8位就无法正常显示,可是这样变成灰度了subplot(1,2,2);     %分为1行2列的子图显示,并且在2显示调整对比度后的图imshow(IMG3);title('Processed Image');1.1.2. 效果图


返回列表