Douglas–Peucker 简化边
Simplify edge by Douglas–Peucker
边缘检测
我已经使用 Soble
运算符得到了一些有用的东西 points.Here 是我的 al:
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});
}
}
}
简化边
我知道 Douglas–Peucker al 可以帮助我简化边缘,但关键是边缘点的顺序。
那么如何使用 Douglas–Peucker al?
在简化之前,您必须在连续链中加入边缘点。
著名的 Canny algorithm 最重要的部分是边缘跟踪,因此您可以学习此算法并应用使用过的方法。
边缘检测
我已经使用 Soble
运算符得到了一些有用的东西 points.Here 是我的 al:
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});
}
}
}
简化边
我知道 Douglas–Peucker al 可以帮助我简化边缘,但关键是边缘点的顺序。
那么如何使用 Douglas–Peucker al?
在简化之前,您必须在连续链中加入边缘点。
著名的 Canny algorithm 最重要的部分是边缘跟踪,因此您可以学习此算法并应用使用过的方法。