【发布时间】:2021-04-23 22:21:51
【问题描述】:
在二维平面中,我想检查相邻点直到满足条件。例如,在此图像中取一个红色像素 (x,y)。我想迭代找到最接近所选红色像素的白色像素。
这是@Pranav Hosangadi提供的更新图片
我的原始代码现在无关紧要了。
一种可能的解决方案是创建一个按距离排序的数组(在图像上给出)。然后,通过循环遍历这个数组,检查何时满足条件(例如,该点是白色的)。但是,这个数组将是不确定的,并且是多余的。
// $x,$y is a given point
$array = array(
'0,0'=>0,
'-1,0'=>1,
'-1,-1'=>1.4
);
asort($array)
foreach($array as $a=>$b){
$c=explode(',',$a);
$x2=$c[0]; // x-axis distance from the given point
$y2=$c[1]; // y-axis distance from the given point
$x3=$x+$x2;
$y3=$y+$y2;
if( $x3,$y3 point is white) { break;}
}
$closest_distance=$b;
因此,我们需要在没有预定义$array的情况下构建循环。
【问题讨论】:
-
周边点可以是4连通的,也可以是8连通的,即邻居是南、西、北、东,也可以包括西南、西北、东北、南-东方。您在代码中使用哪一种?
-
您仍然需要定义“最接近”。可以对角线在你的棋盘上移动吗?
-
@Googlebot 简单地从起始像素向外螺旋的问题是,当您向外一层时,到起始像素的距离会减小。例如,在i.stack.imgur.com/Z1XFD.png 中,距离 4.2 的像素将位于距离 4.1 和 4 的像素之前。
-
您可以使用Bresenham circle-finding algorithm 并寻找与增加的半径相匹配的点,但这仍然会留下空隙。例如在this image 中:整数半径从 6 增加到 15 的算法找到的点被着色(非紫色),但某些像素从未被选中。
-
@El_Vanja 你说的有道理——除非你知道原点,否则你无法回答“哪个点是最近的白点”这个问题。我是说起源知识对 OP 的问题无关紧要,即 他们可以使用什么算法。在图像中选择您最喜欢的点作为原点。只要你的原点在整个练习过程中保持不变,它就不会影响算法。
标签: python php loops coordinates pixel