Упростить край Дугласом – Пекером
Обнаружение края
я использовал 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});
}
}
}
Упростить край
Я знаю, что Дуглас-Пекер и другие могут помочь мне упростить ребро, однако ключевой момент заключается в том, что последовательность точек ребра.
Так как же я могу использовать Дугласа – Пекера?
1 ответ
Решение
Перед упрощением вы должны объединить ребра в непрерывную цепочку.
Самая важная часть известного алгоритма Canny - это отслеживание контуров, поэтому вы можете изучить этот алгоритм и применить используемые подходы.