zoukankan      html  css  js  c++  java
  • 灰度世界算法(Gray World Algorithm) 分类: 图像处理 Matlab 2014-12-07 18:40 874人阅读 评论(0) 收藏

    人的视觉系统具有颜色恒常性,能从变化的光照环境和成像条件下获取物体表面颜色的不变特性,但成像设备不具有这样的调节功能,

    不同的光照环境会导致采集的图像颜色与真实颜色存在一定程度的偏差,需要选择合适的颜色平衡(校正)算法,消除光照环境对颜

    色显现的影响。灰度世界算法是最常用平衡算法。

    一、灰度世界算法

    灰度世界算法以灰度世界假设为基础,该假设认为:对于一幅有着大量色彩变化的图像,三个分量的平均值趋于同一灰

    度值从物理意义上讲,灰色世界法假设自然界景物对于光线的平均反射的均值在总体上是个定值,这个定值近似地为“灰

    色”。颜色平衡算法将这一假设强制应用于待处理图像,可以从图像中消除环境光的影响,获得原始场景图像。

    算法执行步骤:

    (1)一般有两种方法确定:

    要么取固定值(如最亮灰度值的一半,八位显示的话即为128);

    要么通过计算图像三通道平均值,取

    (2)计算三个通道的增益系数:;;

    (3)根据Von Kries对角模型,对于图像中的每个像素,调整其分量分量:

    这种算法简单快速,但是当图像场景颜色并不丰富时,尤其出现大块单色物体时,该算法常会失效。

    :Von Kries提出,可用一个对角矩阵变换描述两种光照条件下同一物体表面颜色间的关系。假定在光照下感知

    到的物体值分别为根据Von Kries对角理论有:


    该理论实现不同光源间的转换。

    二、Matlab实现

    function Test()
    I=imread('test.jpg');
    y=GrayWorld(I);
    y=uint8(y);
    figure(1);imshow(I);
    figure(2);imshow(y);
    
    
    function y=GrayWorld(Image)
    r=Image(:,:,1);
    g=Image(:,:,2);
    b=Image(:,:,3);
    
    avgR = mean(mean(r));
    avgG = mean(mean(g));
    avgB = mean(mean(b));
    avgRGB = [avgR avgG avgB];
    grayValue = (avgR + avgG + avgB)/3
    scaleValue = grayValue./avgRGB;
    
    newI(:,:,1) = scaleValue(1) * r;
    newI(:,:,2) = scaleValue(2) * g;
    newI(:,:,3) = scaleValue(3) * b;
    
    y=newI;
    


    测试结果:



    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    LeetCode 172. Factorial Trailing Zeroes
    C++primer 练习12.27
    C++primer 练习12.6
    C++primer 练习11.33:实现你自己版本的单词转换程序
    77. Combinations
    75. Sort Colors
    74. Search a 2D Matrix
    73. Set Matrix Zeroes
    71. Simplify Path
    64. Minimum Path Sum
  • 原文地址:https://www.cnblogs.com/luo-peng/p/4646231.html
Copyright © 2011-2022 走看看