2013-02-21 1 views
1

나는 이미지 비교를위한 앱을 개발했다. 여기 나는 색상을 비교하고있다. 참조 차트가 데이터베이스에 있습니다. 내 애플 리케이션의 작업은 .. 카메라로 색상을 캡처 같습니다. 카메라는 의도하지 않은 카메라 API로 제어됩니다. 캡쳐 된 이미지는 참조 차트와 비교됩니다. 내 문제는 가벼운거야. 흰색 배경에서 이미지를 캡쳐하고 있습니다.하지만 라이트 변경에 따라 출력이 크게 달라집니다. 나는 유클리드 거리를 사용하고있다. 라이트 변형으로 나는 정확한 출력을 얻지 못했습니다. 누구든지 어떤 단서를 가지고 있습니까? 빛의 문제를 해결하십시오. ?? 거기에 이미지를 정규화하는 방법이 무엇입니까 ?? 메신저를 사용하여 안드로이드 2.2이미지 비교 android

+0

여기 아무도 나를 도와 없습니다.? – Nisha

+0

http://stackoverflow.com/questions/843972/image-comparison-fast-algorithm – Shiv

+0

http://stackoverflow.com/questions/11045263/opencv-for-android-image-compare – Shiv

답변

0

아마 당신은 이미지 비교를위한 편리한 옵션을 제공하는 몇 가지 오픈 소스 이미지 프로세싱 라이브러리를 사용할 수 있습니다.

많은 이미지 조작 기능이있는 OpenCV를 사용하고 Android와 쉽게 통합 할 수 있습니다.

OpenCV

이 빛 문제 해결에 도움이되는 사항이 될 수 있습니다.

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 ; 
} 
0

이 같은 색상 차이를 확인하려면 다음

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

Catalano Framework,

사용할 수 있습니다.

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);