valbok / img.chk

37 stars 13 forks source link

kmean keypoints #3

Open vinnitu opened 9 years ago

vinnitu commented 9 years ago

Не могу разобораться с opencv api, может подскажете как побороть?

Имеется

std::vector<cv::KeyPoint> keypoints;

хочется использовать

double kmeans(InputArray data, int K,
    InputOutputArray bestLabels,
    TermCriteria criteria,
    int attempts, int flags,
    OutputArray centers=noArray() )

но бог его знает что тут InputArray...

Видел, что в качестве data может передаваться

std::vector<cv::Point2f>

но это как бы несовсем то что у нас есть, т.е. нужно сделать что-то типа

        std::vector<cv::Point2f> points(keypoints.size());
        for (auto kp : keypoints)
        {
            points.push_back(kp.pt);
        }

и это всё для того чтобы на выходе получить InputOutputArray, и это тоже непонятно что, ну т.е. скорее всего это будет cv::Mat, но как оно будет наполнен?

и что у него будет по [row][col] ? объект какого типа?

как я ожидаю получить массив массивов точек (cv::Point) или cv::Mat - это оно и есть?

Ну т.е. в каждой строке(столбце?) будет массив точке относящихся к данному кластеру?

....Ok, если так, то потом мне хочется сделать crop участка изображения, в который попадают точки нашего класса + учесть KeyPoint::size параметр, чтобы захватить area наших KeyPoints

Ну и фактически нужно пройтись по всем точкам класстера и найти его вернюю\нижнюю и левую\правую границы с учётом KeyPoint::size параметра (мне кажется, что это важно), как я сказал выше, а потом сделать кроп и наконец-то phash для полученого кусочка.

В самом cv::KeyPoint есть поле class_id, который как будто-то бы и предназначен для назначения id класстера к которому его отнесла какая-то функция разбивающая на кластеры, но тут получается какая-то ерунда с cv::KeyPoint, cv::Point2f и cv::kmeans() c учётом того что size (диаметр области ключевой точки) на ходится в KeyPoint и когда вычисляем границы вырезаемой области - нужно из InputOutputArray сопоставлять точки с keypoints и их параметром size

Много чего наговорил, но я надеюсь мы понимаем друг друга :))

vinnitu commented 9 years ago

в общем я сделал то о чем писал выше, чуть позже поделюсь наработками