在Java中查找一条直线上的所有像素

4
直接进入正题:假设我有两个特定的像素a和b,以及其他一些随机像素的列表。现在,我想检查该列表中的所有像素是否在通过a和b的直线上(但该直线不限于具有a和b作为端点!)我查看了Bresenham线算法,但它似乎只能找到a和b之间的点?我也查看了线性方程,但我还是不知道如何将连续的线段适当地离散化成像素...(如果这很重要)我正在尝试在java中实现随机采样算法,该算法尝试找到包含最多像素的线。谢谢您的帮助 :)
2个回答

4
我强烈建议您计算点与线之间的距离。如果您使用一个像素作为测量单位(如果您在像素坐标系统中工作),则可以简单地检查从点到线的距离是否小于1个像素。
以下是如何计算点与线之间的距离:

1
Bresenham线算法速度更快,而且可以很容易地适应这种情况。 - Gangnus

0

你可以在同一条线上搜索不在图像边界内的点,而不是在a和b之间进行搜索。你可以简单地将向量(b-a)放置到a侧和b侧所需的次数来获取它们。然后使用Bresenham的线算法。

至于更具体的答案,请更好地定义问题。您是否将像素视为点、正方形还是圆形?在您的术语中,“像素在该行上”是什么意思?您的线宽度是多少?您是在寻找每厘米长度或矩形边界上像素数量最多的线?您要在哪些线中进行搜索?


Bressenham线算法可以找到“构成一条直线的所有像素点”。根据定义,该算法在线段长度方面必须是线性的。我理解得对吗? - aioobe
据我所知和我个人看法,这是通过算法实现的二维图形函数从一个点到另一个点绘制直线的最快方法。 - Gangnus
我相信你完全误解了OP的问题。他有一组点,他想找出哪些点在直线上。为此,他显然不必查看沿着每个单独的点。你同意吗? - aioobe
嗯。是的。抱歉。我只是猜测。但我的答案仍然有效。提问者知道并想使用一些算法(Bressenham's算法)。但不知道如何在给定线段之外的部分上使用它。我告诉他如何做。任何其他算法都会花费更多时间,因为据我所了解,他已经编写了这个算法。 - Gangnus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接