Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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_Camera_Computer Vision_Intrinsics_Distortion - Fatal编程技术网

Python 基于相机高度计算广角/短焦距镜头引起的厘米/像素畸变

Python 基于相机高度计算广角/短焦距镜头引起的厘米/像素畸变,python,camera,computer-vision,intrinsics,distortion,Python,Camera,Computer Vision,Intrinsics,Distortion,给定一个具有视场角fov、安装高度(厘米height)和一帧图像的头顶摄像机,我可以使用以下代码计算边界框的最小和最大长度边(以像素为单位),用于检测人员: def min_max_area(img, height, fov): """ Use height (in centimeters) to determine the appropriate minimum and maximum pixel area for detecting people. """

给定一个具有视场角
fov
、安装高度(厘米
height
)和一帧图像
的头顶摄像机,我可以使用以下代码计算边界框的最小和最大长度边(以像素为单位),用于检测人员:

def min_max_area(img, height, fov):
    """
    Use height (in centimeters) to determine the appropriate minimum and
    maximum pixel area for detecting people.
    """
    min_cm_width = 30  # female forearm-to-forearm is about 45 cm
    max_cm_width = 70  # male forearm-to-forearm is about 55 cm

    avg_person_height = 169

    # get real distance of camera view width and centimeters per pixel
    x = (height - avg_person_height) * math.tan(math.radians(fov/2)) * 2
    cm_per_pixel = x / img.shape[1]

    # determine minimum and maximum edge length of bounding box
    min_pixel_width = min_cm_width / cm_per_pixel
    max_pixel_width = max_cm_width / cm_per_pixel

    return min_pixel_width**2, max_pixel_width**2
这适用于标准焦距镜头或安装在离地面较远位置的短焦距镜头。例如,我用安装在274厘米处的106度视场摄像机进行了测试,这没问题。安装在209厘米处的60-70度FOV镜头工作良好,但无法捕获足够大的视场,因此需要使用广角镜头的解决方案

然而,当我使用安装在209厘米处的170度视场摄像机时,边界框太小,无法检测到站在摄像机下面的人。使用106度视场摄像机时,问题依然存在,尽管问题没有那么明显

这是安装在209厘米处的170度FOV摄像机的屏幕截图——红色和黑色方块分别是计算错误的最小和最大边界框:

我的想法是:

  • 必须有一些数学来缩放边界框的大小

  • 使用FOV/给定焦距可能足够,也可能不够

  • 如果FOV/给定的焦距不够,计算相机的固有参数将很有希望

  • 当发现轮廓时,使用其与光学中心的径向距离(与相机矩阵结合?)动态计算cms/像素,而不是假设整个图像的比例恒定


我认为可能包含与我的需求相关的信息,但我不确定…缩放边界框(如果可能)以纠正厘米/像素扭曲需要哪些相机参数(如果有)?如果可能的话,一个方程可以采用什么一般形式来实现这一点

请添加Python标记。对于你的问题:正如你自己发现的,如何处理扭曲的图像,特别是广角拍摄的图像,是当前研究的一个主题。由于您希望将代码片段用于动态图像,我建议您规范化扭曲的部分(idk how)应用BB并将其转换回。如果您知道一篇处理这种失真的好文章,请告诉我:)请添加Python标记。对于你的问题:正如你自己发现的,如何处理扭曲的图像,特别是广角拍摄的图像,是当前研究的一个主题。由于您希望将代码片段用于动态图像,我建议您规范化扭曲的部分(idk how)应用BB并将其转换回。如果你知道一张处理这种失真的好纸,请告诉我:)