У меня есть школьный проект, в котором мне нужно идентифицировать объект в облаке точек XYZRGB, созданном kinect, сравнивая набор характеристик этого объекта с обучающим набором.
Характеристики объектов включают в себя:
- длина (в метрах);
- Высота (в метрах);
- Количество баллов.
- Красный (Среднее по всем пунктам, от 0 до 255);
- Зеленый (среднее по всем пунктам, от 0 до 255);
- Синий (среднее по всем пунктам, от 0 до 255);
В тренировочном наборе у нас есть что-то вроде (в том же порядке, что и выше):
blue_box 0.115771 0.0787957 205 52.4049 161.946 161.946
white_box 0.120375 0.0913906 274 212.974 206.255 206.255
red_box 0.223208 0.118088 470 183.574 37.2574 37.2574
black_tape 0.194007 0.103328 303 74.3234 71.8647 71.8647
blue_book 0.223942 0.232253 758 54.7559 74.1214 74.1214
gray_book 0.193717 0.225758 671 180.365 183.131 183.131
...
Чтобы идентифицировать объект, нам нужно проверить, какой объект в обучающем наборе имеет наиболее похожие значения, нормализуя разницу (делая так, чтобы сходство представлялось значением между [0..1]).
Проблема в том, что евклидово расстояние не работает в этом случае, так как:
Наличие объекта с:
- 10 см Высота и 200 Красный
Учебный комплект с:
- Object_X: 20 см в высоту и 200 красных
- Object_Y: 10 см в высоту и 211 красный
Object_X будет выбран неправильно, даже если Object_Y похож.
У меня вопрос, есть ли способ нормализовать эти значения, чтобы все они имели одинаковый вес при проверке сходства?