Упростить край Дугласом – Пекером

Обнаружение края

я использовал Soble Оператор, чтобы получить некоторые полезные очки. Вот мой Аль:

    for (int x = 0; x < mWidth; x++) {
        for (int y = 0; y < mHeight; y++) {
            int grayX = getGrayPoint(x + 1, y - 1) + 2 * getGrayPoint(x + 1, y) + getGrayPoint(x + 1, y + 1) -
                    (getGrayPoint(x - 1, y - 1) + 2 * getGrayPoint(x - 1, y) + getGrayPoint(x - 1, y + 1));
            int grayY = (getGrayPoint(x - 1, y + 1) + 2 * getGrayPoint(x, y + 1) + getGrayPoint(x + 1, y + 1)) -
                    (getGrayPoint(x - 1, y - 1) + 2 * getGrayPoint(x, y - 1) + getGrayPoint(x + 1, y - 1));
            int gradient = (int) Math.sqrt(grayX * grayX + grayY * grayY);
            if (gradient > 40){
                mEdgePoints.add(new int[]{x,y});
            }
        }
    }

Упростить край

Я знаю, что Дуглас-Пекер и другие могут помочь мне упростить ребро, однако ключевой момент заключается в том, что последовательность точек ребра.

Дуглас-Peucker

Так как же я могу использовать Дугласа – Пекера?

1 ответ

Решение

Перед упрощением вы должны объединить ребра в непрерывную цепочку.

Самая важная часть известного алгоритма Canny - это отслеживание контуров, поэтому вы можете изучить этот алгоритм и применить используемые подходы.

Другие вопросы по тегам