【问题标题】:Elegant method to find next pixel in line寻找下一个像素的优雅方法
【发布时间】:2012-09-18 07:18:25
【问题描述】:

我正在追踪一条有时与其他线相交的单像素线,我正在尝试找到一种优雅的方式来保持在同一条线上。

当前像素为0(蓝色)。前一个像素是-1(黑色)。

在第一张图片中,有两个可能的下一个像素(绿色和红色),但应该选择绿色像素 (1),因为它延续了线条。

在第二张图片中,有两个绿色像素 (1),我对此同样满意 - 只要不是红色像素,我不介意在它们之间做出选择。

在伪 cpp 中:

vector<Point> points;

for (i = x - 1; i < x + 2; i++) {
    for (j = y - 1; j < y + 2; j++) {
        if (i == x && j == y) {
            continue;
        }

        if (IS_ON(i, j) && NOT_VISITED(i, j)) {
            points.push_back(Point(i, j));
        }
    }
}

// sort points to find closest to opposite lastX,lastY

lastX = x;
lastY = y;

x = points[0].x;
y = points[0].y;

排序步骤是我正在努力解决的问题。

我正在考虑使用 std::sort,但我很难制定比较函数。

合适的比较函数是什么样的,或者有更优雅的方法吗?

【问题讨论】:

  • 我并没有考虑太多,但是选择离最后一个像素最远的像素怎么样?
  • 您的问题描述不正确,或者您没有提供所有信息。选择右侧图像中的任何 1 个像素不再是一条线,除非您定义一个起点/终点并使用诸如 bresenham 之类的东西穿过该线。然后由于光栅化(即混叠)而发生步骤。你的斜率总是1吗?如果是,那么 1 都不在您的线路上。当正确的图像中两个 1 都缺失时会发生什么?红色像素是您的“最佳选择”吗?但是你是在沿着曲线而不是直线。
  • @Bwmat 你说得对,考虑到当前像素,我过于复杂了。我只需要距离前一个像素最远的像素,谢谢!

标签: c++ sorting line pixel


【解决方案1】:

如果 currentP=(x,y) 是你的当前点,lastP 是上一个点,然后通过取点积来测试所有可能的点 p

(currentP-lastP)*(p-currentP)

并选择具有最大点积的 p。点积见维基百科。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多