簡體   English   中英

彩色圖像之間的相似度測量(OpenCV)

[英]Similarity Measurement between Color Image (OpenCV)

我正在使用一個CBIR(基於內容的圖像檢索)項目,該項目將繪制圖像的RGB直方圖,並計算其他圖像與查詢圖像之間的距離。

我正在使用VS 2008 - MFC和OpenCV庫。 我想用來計算距離的方法是歐幾里德距離(ED),但不知怎的,我沒能解決它。

我找到了一個函數--cvCalcEMD2(),可以幫助我計算兩個直方圖之間的距離。 要使用此功能,我需要為直方圖創建簽名。

這是我找到的創建簽名示例

在For循環中,有一行我需要在直方圖中傳遞:

float bin_val = cvQueryHistValue_2D(hist1,h,s);

在我的直方圖函數中沒有類似變量h_bins和closesins的東西

在我的程序中,我將直方圖計算/繪制為R,G和B.意味着,每個圖像我都有3個直方圖。 例如:CvHistogram * hist_red,* hist_green,* hist_blue;

如何使用直方圖創建簽名?

*我的drawHistogram函數的鏈接在我的評論下面

這是我在我的項目中創建RGB hist簽名的代碼:在我的情況下,我需要簽名tu是一個浮點數組。

void makeColorSign(const IplImage* img,float** colorSign) {
    unsigned int* N = Params::colorSignSize;
    float* sign = (float*)malloc(N[0]*N[1]*3*sizeof(float));
    IplImage* s = cvCreateImage(cvSize(N[0],N[1]),img->depth,img->nChannels);
    cvResize(img,s,CV_INTER_NN);
    RgbImage rgb(s);
    for(unsigned int y=0; y<N[1]; ++y) {
        for(unsigned int x=0; x<N[0]; ++x) {
            unsigned int coord = (y*N[1]+x)*3;
            sign[coord] = rgb[y][x].r;
            sign[coord+1] = rgb[y][x].g;
            sign[coord+2] = rgb[y][x].b;
        }
    }
    *colorSign = sign;
    cvReleaseImage(&s);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM