데이터 세트 1과 2가 있습니다. 2D 데이터가 있습니다. 예를 들어 ,2D 데이터 (OpenCV?)를 사용하여 3D 히스토그램 생성
데이터 1 : (X1, Y1), (X2, Y2), (X3, Y3) .... (XN, YN)
데이터 2 (X1 ', Y1') (x2 ', y2'), .... (xm ', ym')
가능하면 히스토그램과 Earth Mover 's Distance (EMD)를 사용하여 비교하고 싶습니다.
나는 2D 데이터를 가지고 있기 때문에 데이터는 2D 맵에 배치해야하며 2D 맵의 히스토그램 높이는 데이터의 빈도를 가지므로 3D 히스토그램이어야합니다. 히스토그램을 그리고 1D 데이터를 사용하여 비교하는 예제를 만들었지 만 2D 데이터로 바꾸려고하지 않았습니다. 어떻게 작동합니까? 예를 들어
,
calcHist(&greyImg, 1, channel_numbers, Mat(), histogram1, 1, &number_bins, &channel_ranges);
그쪽이 코드 이미지의 계조 강도 (1D 데이터) 히스토그램을 만든다. 그러나 2D 데이터로 변경할 수는 없었습니다.
내 아이디어는 이것이다 : 나는 이력서를 만들 :: 매트 Data1Mat, Data2Mat; (매트 크기는 x와 y의 최대 값으로 설정됩니다.) 그런 다음 Data1의 x 값을 Mat1의 첫 번째 채널로 누르고 y 값을 두 번째 채널로 누릅니다. (데이터 2 및 Data2Mat에 동일)는 예를 들면 (X1, Y1)에 대해,
Data1Mat.at(x1,y1)[0] = x1, Data1Mat.at(x1, y1)[1] = y1;
근데 ... 등