使用2D数据创建3D直方图(OpenCV?)

时间:2017-04-07 08:43:53

标签: c++ opencv image-processing

我有数据集1和2.那些有2D数据。 例如,

数据1: (x1,y1),(x2,y2),(x3,y3)....(xn,yn)

Data2:(x1',y1'),(x2',y2'),....(xm',ym')

如果可能的话,我想使用直方图和地球移动距离(EMD)来比较它们。

因为我有二维数据,所以数据应放在二维地图上,二维地图上直方图的高度具有数据的频率,因此应该是三维直方图。即使我成功创建了绘制直方图并使用1D数据进行比较的示例,但我未能尝试将其更改为2D数据。它是如何工作的?

例如,

calcHist(&greyImg, 1, channel_numbers, Mat(), histogram1, 1, &number_bins, &channel_ranges);

此代码将图像的灰度强度(1D数据)设为直方图。但我无法将其更改为2D数据。

  • 我的想法是这样的: 我创建了cv :: Mat Data1Mat,Data2Mat; (垫尺寸设置为x和y的最大值) 然后,将Data1的x值推送到Mat1的第一个通道,将y值推到第二个通道。 (与Data2和Data2Mat相同) 例如,对于(x1,y1),设置

    Data1Mat.at(x1,y1)[0] = x1, Data1Mat.at(x1, y1)[1] = y1;
    
像这样。然后创建它们的直方图并进行比较。我是否认为正确?

1 个答案:

答案 0 :(得分:0)

我认为更正确的说法是:1D数据的直方图,2D数据的直方图。

您需要2D数据的直方图。

  • 1D柱状图计算达到bin间隔的标量值的数量。
  • 2D直方图按区域划分平面并计算2D点的数量 击中每个地区。

这里计算出图像的H,S 2D直方图:Calculate HSV histogram of a coloured image is it different from H-S histogram?

你有同样的问题,但是把你的x代替H而不是S代替。