【问题标题】:Python - Computing Earth Mover Distance of histogramsPython - 计算直方图的地球移动距离
【发布时间】:2016-07-01 03:30:56
【问题描述】:

我正在尝试使用从http://docs.opencv.org/2.4/modules/imgproc/doc/histograms.html 获得的以下 sn-p 计算我拥有的两个直方图 (x1,x2) 之间的地球移动器距离:

cv2.cv.CalcEMD2(x1, x2,cv2.cv.CV_DIST_L1)

但是我不断收到此错误。

TypeError: CvArr argument 'signature1' must be IplImage, CvMat or CvMatND. Use fromarray() to convert numpy arrays to CvMat or cvMatND"

我尝试使用 .fromarray() 将我拥有的内容转换为 CvMat 格式,但尚未成功。是不是我做错了什么?

这是我正在使用的两种类型的数组(为清楚起见缩短为三个元素)我尝试使用 cv2.cv.fromarray() 进行转换:

np.histogramdd(data, bins = 80)) 

给我:

(array([  28.,    5.,    0.]), [array([-1.71194523, -1.66131523, -1.61068523])])

和一个普通的 np 数组:

[28.    5.    0.]

这两种方法都不适合我,也不允许我计算阵列之间的地球移动器距离。任何帮助将不胜感激!

【问题讨论】:

    标签: python opencv numpy histogram


    【解决方案1】:

    好吧,经过反复试验,我认为这是解决方案: (取自How to compute "EMD" for 2 numpy arrays i.e "histogram" using opencv?的最佳答案)

    ref = 参考 np 数组 meas = np 数组进行比较

    创建 numpy 数组 [[data][weights]] 的直方图,将其转换为 [data[i],weight[i]] 格式。然后到一个 cv 数组,然后将其转换为 EMD 函数的信号函数。

    这不是一个理想的解决方案 - 出于教育目的,任何进一步的改进/建议将不胜感激!!!

    #reference array:
    j = np.histogramdd(ref, bins = 80)
    a = np.zeros((len(j[0]), 2))
    for i, x in enumerate(j[0]):
        a[i][0] = x
        a[i][1] = j[1][0][i]
    cv_array_ref = cv2.cv.fromarray(a)
    
    a32 = cv2.cv.CreateMat(cv_array_ref.rows, cv_array_ref.cols,cv2.cv.CV_32FC1)
    cv2.cv.Convert(cv_array_ref, a32)
    
    
    #measured array:
    
    jj = np.histogramdd(amplitude_norm_data[0], bins = 80)
    aa = np.zeros((len(jj[0]), 2))
    for ii, xx in enumerate(jj[0]):
        aa[ii][0] = xx
        aa[i][1] = jj[1][0][ii]
    cv_array_meas = cv2.cv.fromarray(aa)
    a322 = cv2.cv.CreateMat(cv_array_meas.rows, cv_array_meas.cols, cv2.cv.CV_32FC1)
    cv2.cv.Convert(cv_array_meas, a322)
    
    
    cv2.cv.CalcEMD2(a32, a322,cv2.cv.CV_DIST_L1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多