1

我开发了一个用于图像比较的应用程序。我在这里比较颜色。参考图表在数据库中。我的应用程序的工作就像.. 用相机捕捉颜色。相机由相机 API 而非意图控制。并将捕获的图像与参考图表进行比较。我的问题是光。我在白色背景中捕捉图像.. 但根据光线变化,输出变化很大。我正在使用欧几里得距离。由于光线变化,我无法获得正确的输出。有没有人有任何建议:解决灯光问题。??有什么方法可以标准化图像吗??我使用的是安卓 2.2

4

3 回答 3

0

如果您面对浅色背景,那么我建议使用两个图像的所有像素的 ARBB 值,您可以比较两个图像的 ARGB 值,我最近在我的一个项目中完成了这项任务。这是其中的小代码。

  • 该方法将为您提供图像的平均 ARGB 颜色。
  • 在设置了两个图像的平均值之后,您只需将其作为两个集合比较进行比较
private int[] getAvgARGB(int[] imagePixels ){
      int [] argbColection  = new int[4];
      int pixcel=0 , Aavg=0 ,Ravg =0, Gavg=0 ,Bavg=0 ;
      int pixcelSize  = 0 ; 
      for(int i = 0 ; i<imagePixels.length; i++){
          pixcel = imagePixels[i];  //get pixel value (ARGB)
          int A = (pixcel >> 24) & 0xFF; //Isolate Alpha value...
              int R = (pixcel >> 16) & 0xFF; //Isolate Red Channel value...
              int G = (pixcel >> 8) & 0xFF; //Isolate Green Channel value...
              int B = pixcel & 0xFF; //Isolate Blue Channel value...
              Aavg += A ;
              Ravg += R ;
              Gavg += G ;
              Bavg += B ;
        }
   pixcelSize = imagePixels.length ;  

   argbColection[0] = Aavg/pixcelSize ;
   argbColection[1] = Ravg/pixcelSize ; 
   argbColection[2] = Gavg/pixcelSize ;
   argbColection[3] = Bavg/pixcelSize ;

   return argbColection ;
}
于 2013-06-19T11:42:47.463 回答
0

如果你想像这样检查色差:

http://en.wikipedia.org/wiki/Color_difference

您可以使用Catalano 框架

它适用于 Java 和 Android。

使用色差的示例:

float[] lab = ColorConverter.RGBtoLAB(100, 120, 150, ColorConverter.CIE2_D65);
float[] lab2 = ColorConverter.RGBtoLAB(50, 80, 140, ColorConverter.CIE2_D65);

double diff = ColorDifference.DeltaC(lab, lab2);
于 2014-01-26T05:42:48.167 回答
0

也许您可以使用一些开源图像处理库,帽子为图像比较提供了方便的选项。

我建议您使用具有众多图像处理功能的 OpenCV,您可以轻松地将其与 android 集成。

开放式CV

可能这可以帮助您解决灯光问题。

于 2013-02-21T10:21:33.040 回答