zoukankan      html  css  js  c++  java
  • The Gray World Assumption

    Color Constancy 色彩恒常性(2)The Gray World Assumption  

      

    着上篇往下讲,与White Patch Retinex同样。Gray-World 也是恢复图像原色的算法。两种算法最核心的不同在于对光源强度的预计。
    Gray World 算法基于一个如果The Gray World Assumption:on average, the world is gray.也就是说自然图像的像素颜色平均值为常值1/2(在颜色范围归一化在[0,1]的情况下)。


    以下讲述该算法的详细数学推导过程。

    算法:

    (1)基本算法

    下式是图像成像的数学表达,详细的含义在上篇文章Color Constancy 色彩恒常性(1)White Patch Retinex中有讲到。这里就不再反复。

    [原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理
    依旧如果像素的色彩和像素的亮度值成比例[原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理

    依照Gray World如果,对[原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理取平均。则有

    [原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理
    且 [原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理

    式中E(R) = 1/2即是由Gray World如果得出。带入后得到:

    [原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理

    依旧如果E(G)=1。那么光源的强度能够预计为:

     [原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理  (1)

    终于经过色彩恢复后的图像为:

    [原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理(2)

    (2)改进算法

    上述的原始算法具有非常大的局限性。若图像的颜色比較单一,那么就不再满足gray world如果。为解决问题,提出了一些改进的算法,当中的一种主要思路是,先对图像进行切割。然后求切割后每块图像的颜色均值,进而求出总的颜色均值。用数学能够表示为下式:

    [原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理

    式中。nr为切割后区域的个数,a(Rj)为第j个区域的平均像素值。

    通过这样的方法求得终于的ai带入式(1)中。

    在这样的思想下,提出了一种详细的算法,该算法求三个通道的直方图,然后将其量化为10类,那么终于能够将256*256*256中颜色量化为10*10*10=1000种颜色。书中将这1000种类描写叙述为1000 buckets。

    (直观的理解就是把整幅图像画一个直方图,该直方图有1000个柱,也就是1000个bucket)。

    终于的求ai的式子为:

    [原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理

    式中,nnz为直方图中像素点个数非0的bucket的个数,nb为bucket的总个数(依照书中的意思。nb =1000,我的理解是nb = nnz),ci(j)为第j个bucket中像素的值。

    相同的。将求得的ai带入式(1)中。然后带入式(2)求得恢复后的输出。

    MATLAB代码:

    代码(当中,para=0是原始的方法,para=1是改进后的方法)

     

    1. function out = GrayWorld(in,para)%
    2. %%%% copyright: ofalling %%%%
    3. if( nargin < 2 )
    4. para = 0;
    5. end
    6. out = zeros(size(in));
    7. inDouble = double(in)/255;
    8. % % gamma correction
    9. gamma = 1/2.2;
    10. inDouble = inDouble.^(gamma);
    11. if ( para == 0)% 最原始的gray world算法
    12. for i = 1:3
    13. a(i) = mean(mean(inDouble(:,:,i)));
    14. f = 2;% f = 2/E(G),assume E(G)=1
    15. out(:,:,i) = inDouble(:,:,i)/(f*a(i));
    16. end
    17. elseif( para == 1)% 先使用直方图切割为1000块再计算光源强度
    18. inR = inDouble(:,:,1);
    19. inG = inDouble(:,:,2);
    20. inB = inDouble(:,:,3);
    21. nb = 0;
    22. for r = 1:10
    23. for g = 1:10
    24. for b = 1:10
    25. bucket = find((inR>0.1*(r-1))&(inR<0.1*r)&(inG>0.1*(g-1))&...
    26. (inG<0.1*g)&(inB>0.1*(b-1))&(inB<0.1*b));
    27. if (size(bucket)~=0 )
    28. nb = nb+1;
    29. bucketC(nb,:) = [0.1*r-0.05 0.1*g-0.05 0.1*b-0.05];
    30. end
    31. end
    32. end
    33. end
    34. for i =1:3
    35. a(i) = mean(bucketC(:,i));
    36. f = 2;% f = 2/E(G),assume E(G)=1
    37. out(:,:,i) = inDouble(:,:,i)/(f*a(i));
    38. end
    39. end

    (1)原始算法结果

    [原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理
    [原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理

    (2)改进算法结果

    [原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理
    [原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理

    对照实验(1)和(2)的结果,发现改进后的算法明显比原始的算法效果好。且改进后的算法使用范围更广。

  • 相关阅读:
    LruCache 原理
    线程间通信, 进程间通信
    安卓 权限 规则
    android 捕获所有异常 未捕获的异常
    serializable parcelable
    android intent 传递 二进制数据
    apk安装 卸载 原理
    ARGB 8888 内存大小
    dalvik 基于 jvm 的改进
    查看 MySQL 数据库中每个表占用的空间大小
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7203789.html
Copyright © 2011-2022 走看看