matlab 图像白平衡(世界灰度法)
2016-07-10 16:17
555 查看
白平衡是电视摄像领域一个非常重要的概念,通过它可以解决色彩还原和色调处理的一系列问题。白平衡是随着电子影像再现色彩真实而产生的,在专业摄像领域白平衡应用的较早,现在家用电子产品(家用摄像机、数码照相机)中也广泛地使用,然而技术的发展使得白平衡调整变得越来越简单容易,但许多使用者还不甚了解白平衡的工作原理,理解上存在诸多误区。它是实现摄像机图像能精确反映被摄物的色彩状况,有手动白平衡和自动白平衡等方式,本文简要的介绍了几种自动白平衡算法。
原始的灰度世界算法
灰度世界算法(Gray World)是以灰度世界假设为基础的,该假设认为对于一幅有着大量色彩变化的图像, R、 G、 B 三个分量的平均值趋于同一个灰度K。一般有两种方法来确定该灰度。灰度世界算法(Gray World)是以灰度世界假设为基础的,该假设认为对于一幅有着大量色彩变化的图像, R、 G、 B 三个分量的平均值趋于同一个灰度K。
(1)直接给定为固定值, 取其各通道最大值的一半,即取为127或128;
(2)令 K =(Raver+Gaver+Baver)/3,其中Raver,Gaver,Baver分别表示红、 绿、蓝三个通道的平均值。
算法的第二步是分别计算各通道的增益:
Kr=K/Raver;
Kg=K/Gaver;
Kb=K/Baver;
算法第三步为根据Von Kries 对角模型,对于图像中的每个像素R、G、B,计算其结果值:
Rnew = R * Kr;
Gnew = G * Kg;
Bnew = B * Kb;
对于上式,计算中可能会存在溢出(>255,不会出现小于0的)现象,处理方式有两种。
a、 直接将像素设置为255,这可能会造成图像整体偏白。
b、 计算所有Rnew、Gnew、Bnew的最大值,然后利用该最大值将将计算后数据重新线性映射到[0,255]内。实践证明这种方式将会使图像整体偏暗,建议采用第一种方案。
一般来说,灰度世界算法的效果还是比较好的呢,并且该算法的执行速度非常之快。
大致的流程看下图:
图像的代码
参考:http://blog.csdn.net/scottly1/article/details/42741495
原始的灰度世界算法
灰度世界算法(Gray World)是以灰度世界假设为基础的,该假设认为对于一幅有着大量色彩变化的图像, R、 G、 B 三个分量的平均值趋于同一个灰度K。一般有两种方法来确定该灰度。灰度世界算法(Gray World)是以灰度世界假设为基础的,该假设认为对于一幅有着大量色彩变化的图像, R、 G、 B 三个分量的平均值趋于同一个灰度K。
(1)直接给定为固定值, 取其各通道最大值的一半,即取为127或128;
(2)令 K =(Raver+Gaver+Baver)/3,其中Raver,Gaver,Baver分别表示红、 绿、蓝三个通道的平均值。
算法的第二步是分别计算各通道的增益:
Kr=K/Raver;
Kg=K/Gaver;
Kb=K/Baver;
算法第三步为根据Von Kries 对角模型,对于图像中的每个像素R、G、B,计算其结果值:
Rnew = R * Kr;
Gnew = G * Kg;
Bnew = B * Kb;
对于上式,计算中可能会存在溢出(>255,不会出现小于0的)现象,处理方式有两种。
a、 直接将像素设置为255,这可能会造成图像整体偏白。
b、 计算所有Rnew、Gnew、Bnew的最大值,然后利用该最大值将将计算后数据重新线性映射到[0,255]内。实践证明这种方式将会使图像整体偏暗,建议采用第一种方案。
一般来说,灰度世界算法的效果还是比较好的呢,并且该算法的执行速度非常之快。
大致的流程看下图:
图像的代码
RGB=imread('lena.jpg'); R = RGB(:,:,1); G = RGB(:,:,2); B = RGB(:,:,3); Rx4 = RGB(:,:,1)*4; Gx4 = RGB(:,:,2)*4; Bx4 = RGB(:,:,3)*4; %Rx4只是做了一个简单的线性的提亮,可以不用参考。 Rave = mean(mean(R)); Gave = mean(mean(G)); Bave = mean(mean(B)); Kave = (Rave + Gave + Bave) / 3; R1 = (Kave/Rave)*R; G1 = (Kave/Gave)*G; B1 = (Kave/Bave)*B; R2 = (Kave/Rave)*Rx4; G2 = (Kave/Gave)*Gx4; B2 = (Kave/Bave)*Bx4; RGB_white = cat(3, R1, G1, B1); RGB_whitex4 = cat(3, R2, G2, B2); RGB_white_out = uint8(RGB_white); RGB_white_outx4 = uint8(RGB_whitex4); subplot(121),imshow(RGB_white_out) subplot(122),imshow(RGB_white_outx4)图像结果
参考:http://blog.csdn.net/scottly1/article/details/42741495
相关文章推荐
- 主成分分析(PCA)
- matlab在图片上画标记然后整幅保存的方法
- matlab移位运算
- 基于MATLAB的离散小波变换
- Matlab与C++混合编程(依赖OpenCV)
- matlab调用C程序
- Machine Learning Week2
- Matlab学习(二)
- Matlab学习(一)
- MATLAB中矩阵及其运算
- MATLAB学习笔记
- MATLAB数学建模练习(2)-整数规划
- 十行以内,你写过哪些比较酷的 Matlab 代码?
- FPGA基础知识17(Matlab中滤波器的定点化 浮点运算转换为定点运算)
- MATLAB中impixel
- matlab caffe
- matlab实现hog特征
- MATLAB中的trace函数,求矩阵的迹
- MATLAB中diag函数的作用
- matlab自学经验成果分享 创建一个复数