将图像值栅格化为2D数组

Grid image values to 2D array

我有一个类似于图像的网格,下面要以这种格式放入数组中:

1
2
3
4
5
6
 ;x = wall(black cells and grey boxes), s= start (red circle), g = goal(blue circle), 0 = available path(everything else)
 $data[5][5] = [["x","x","x","x","x"], _
               ["x","s","0","x","x"], _
               ["x","x","0","x","x"], _
               ["x","x","0","g","x"], _
               ["x","x","x","x","x"]]

image

我以为可以使用这些颜色,但不确定如何使用。


  • 看起来您拥有固定角度的视图

    创建功能,将屏幕位置转换为网格位置并返回。 2x线性插值应该很容易。如果相机平移不具有基于单元格的步骤,则您需要网格线的拐角点并将其用作起点...

    例如这样的东西(希望我正确地测量了像素):

    grid function

    1
    2
    x = 236 + (+(u-uh)-(v-vh))*60;
    y = 133 + (-(u-uh)-(v-vh))*30;

    • 60,30x,y中的像元大小
    • (236,133)是中间单元格(uh,vh)的中心位置,以像素为单位
    • uh,vh是中心单元格中的坐标

    将视图平移偏移添加到(uv,hv)(236,133),现在只需从此(u=?,v=?)计算反向转换即可。不要忘记地图不是矩形!是这样的:

    1
    2
    3
    4
    5
    6
    7
    8
    9
        0000x0000,
        000xxx000,
        00xxxxx00,
        0xxxxxxx0,
        xxxxxxxxx,
        0xxxxxxx0,
        00xxxxx00,
        000xxx000,
        0000x0000,
  • 为您可能遇到的所有对象创建一组图像

    每当您未找到匹配项时,都可以在运行时完成此操作,将单元格添加到项目列表中作为新对象类型。

  • 遍历所有网格单元位置并与对象类型进行比较

    对于像素精确渲染的图像,您可以直接比较1:1像素,如果不是这种情况,则需要更强大地比较对象。但是要使算法有效,我们需要查看通常可以遇到的所有对象类型,您可以进行比较:

  • 平均,最小和最大颜色,直方图,
  • 长宽比,...
  • FFT / DCT
  • 质量中心,密度等
  • 不要忘记将与单元格区域的比较蒙版,只是不包括边界矩形角上的相邻单元格

    [笔记]

    没有更多信息就无法更具体