グレースケール画像の 2 つのヒストグラムを比較しようとしています。私は CV_COMP_CHISQR (0.0 完全一致 – 1.0 合計不一致) を使用しています。両方のヒストグラムを 1 に正規化しました。しかし、ヒストグラムを比較すると、意味をなさない 40.0 を超える結果が得られます。手順が間違っているのか、何かが間違っているのかわかりません。これがコードのスナップです。
public class Histogram {
public static void main(String[] args) throws Exception {
String baseFilename = ".../imgs/lp.jpg";
String contrastFilename = ".../imgs/lpUrb.jpg";c/surf_javacv/box_in_scene.png";
IplImage baseImage = cvLoadImage(baseFilename);
CvHistogram hist=getHueHistogram(baseImage);
IplImage contrastImage = cvLoadImage(contrastFilename);
CvHistogram hist1=getHueHistogram(contrastImage);
double matchValue=cvCompareHist(hist, hist1, CV_COMP_CHISQR );
System.out.println(matchValue);
}
private static CvHistogram getHueHistogram(IplImage image){
if(image==null || image.nChannels()<1) new Exception("Error!");
IplImage greyImage= cvCreateImage(image.cvSize(), image.depth(), 1);
cvCvtColor(image, greyImage, CV_RGB2GRAY);
//bins and value-range
int numberOfBins=256;
float minRange= 0f;
float maxRange= 255f;
// Allocate histogram object
int dims = 1;
int[]sizes = new int[]{numberOfBins};
int histType = CV_HIST_ARRAY;
float[] minMax = new float[]{minRange, maxRange};
float[][] ranges = new float[][]{minMax};
int uniform = 1;
CvHistogram hist = cvCreateHist(dims, sizes, histType, ranges, uniform);
// Compute histogram
int accumulate = 0;
IplImage mask = null;
IplImage[] aux = new IplImage[]{greyImage};
cvCalcHist(aux,hist, accumulate, null);
cvNormalizeHist(hist, 1);
cvGetMinMaxHistValue(hist, minMax, minMax, sizes, sizes);
System.out.println("Min="+minMax[0]); //Less than 0.01
System.out.println("Max="+minMax[1]); //255
return hist;
}
}//CLass end