Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从深度贴图计算视野_Python_Numpy_Opencv_Computer Vision_Point Clouds - Fatal编程技术网

Python 从深度贴图计算视野

Python 从深度贴图计算视野,python,numpy,opencv,computer-vision,point-clouds,Python,Numpy,Opencv,Computer Vision,Point Clouds,我有一个深度numpyn*n数组。其中每个单元格的值表示该单元格的高度。我想计算一下视野。换言之: if Pixel_height > viewer_height: pixels_behind = -1 有没有一个简单的方法可以做到这一点 编辑:为了清楚起见,我想创建一个类似于这个绿色遮罩的位置矩阵,知道我们有一个高矩阵n*m 我提出了这个函数,它不是很完美,但它的功能与您所说的类似。它有一个分辨率参数,表示要考虑的圆周中有多少个“角度步骤”。我不确定这是解决这个问题的“正确”

我有一个深度numpyn*n数组。其中每个单元格的值表示该单元格的高度。我想计算一下视野。换言之:

if Pixel_height > viewer_height:
    pixels_behind = -1
有没有一个简单的方法可以做到这一点

编辑:为了清楚起见,我想创建一个类似于这个绿色遮罩的位置矩阵,知道我们有一个高矩阵n*m

我提出了这个函数,它不是很完美,但它的功能与您所说的类似。它有一个<代码>分辨率参数,表示要考虑的圆周中有多少个“角度步骤”。我不确定这是解决这个问题的“正确”方法,而且我觉得应该有一个更聪明的方法来做一些操作,但无论如何

将numpy导入为np
def view_字段(高度图、查看器高度、查看器位置、分辨率=360):
高度地图=np.asarray(高度地图)
h、 w=高度\地图形状
vi,vj=观察者位置
#查找高于查看器的位置
m=高度>贴图>查看器高度
#查找每个像素相对于查看器的角度
ii,jj=np.ogrid[-vi:h-vi,-vj:w-vj]
a=np.arctan2(ii,jj)
#每个像素到查看器的距离
d2=np.平方(ii)+np.平方(jj)
d=np.sqrt(d2)
#查找每个像素后面的角度范围
pix_尺寸=0.5
ad=np.arccos(d/np.sqrt(d2+np.square(pix_尺寸)))
#每个像素所包含的最小和最大角度
阿明=a-ad
amax=a+ad
#定义角度“料仓”
ar=np.linspace(-np.pi,np.pi,分辨率+1)
#找到每个像素对应的箱子
b=np。数字化(a,ar)%分辨率
bmin=np。数字化(阿明,ar)%分辨率
bmax=np.数字化(amax,ar)%分辨率
#为每个角度栏找到离高像素最近的距离
angdist=np.full_like(ar,np.inf)
np.最小值at(安氏距离,体重指数[m],d[m])
np.最小值at(安氏距离,bmax[m],d[m])
#如果像素距离小于
#其角仓的可视距离

返回d请更具体一点。你会得到什么作为输入?除了高度图和查看器高度之外,您是否会得到类似于
(行、列)
的指示查看器位置的配对?或者观众总是被假定在高度图之外的某个点上?根据您的描述,这应该像
pixel\u height[pixel\u height>viewer\u height]=-1一样简单。然而,正如@jdehesa所提到的,也许你可以将你的问题重新表述得更精确一点。也许有一个示例数组和预期输出?我也不确定你的逻辑是否正确。。。如果某个像素具有高度
a
,而观看者具有高度
h
,但紧靠其后的像素具有高度
b>a
,那么这难道不应该也是可见的吗?也就是说,当你面前有一座山时,你可以看到它的顶部,而不仅仅是它变得比你高。对不起,你是对的,也许它有点不清楚。假设查看器始终位于固定的行和列中。是的,(行,列)表示位置。观众总是摆着同样的姿势。我想要的是得到这些像素后面的投影。因此,如果前面的像素超过该限制,那么后面的像素值也为=-1@user3885334那么我的建议解决了你的问题吗?我实施了。实际上看起来很不错。我确实将pix_大小设置为零,但它似乎仍然工作得很好。我这样认为,不将值转换为角度可以提高精度。@user3885334我想这取决于高度贴图的分辨率和平滑度。一张分辨率相对较高且不太吵闹的地图应该不会带来太多麻烦。如果将
pix\u size
设置为零(这是合理的,我考虑了整个
pix\u size
/
amin
/
amax
事情,然后再决定一个装箱解决方案,但它可能没有那么有用),那么显然可以跳过
ad
,只做
np.minimum.at(angdist,b[m],d[m])
计算angdist
。请随意发布您能想到的任何其他解决方案,无论是从这一解决方案派生的还是从这一解决方案派生的。