1. 前言
热成像仪广泛应用于缺陷检测,那么如何选择热成像仪,以满足缺陷检测需求?关键问题是:如何知道热成像仪能不能拍摄清楚我的缺陷呢?,要回答这个问题,就需要计算出热成像仪在最佳拍摄距离下,一个像素所代表的实际被拍摄物体的面积大小
2. 基础名词概念
2.1. FOV(如👇图所示)
HFOV —— 水平视场角
 VFOV —— 垂直视场角
 DFOV —— 对角视场角
 
2.2. IFOV(IFOV物理意义:一个像素的视角范围)
 

 公式中
  
     
      
       
       
         N 
        
       
      
        N 
       
      
    N:代表图片水平分辨率
  
     
      
       
       
         M 
        
       
      
        M 
       
      
    M:代表图片垂直分辨率
3. 计算一个像素代表的实际被拍摄物体的面积大小
import math
import argparse
def calculate_pixel_area(fov_h, fov_v, distance, resolution_h, resolution_v):
    # 将角度转换为弧度
    fov_h_rad = math.radians(fov_h)
    fov_v_rad = math.radians(fov_v)
    # 计算水平和垂直方向的IFOV
    ifov_h = fov_h / resolution_h
    ifov_v = fov_v / resolution_v
    # 计算每个像素在目标物体上的宽度和高度
    pixel_width = 2 * distance * math.tan(math.radians(ifov_h) / 2) * 1000
    pixel_height = 2 * distance * math.tan(math.radians(ifov_v) / 2) * 1000
    # 计算每个像素的实际面积
    pixel_area = pixel_width * pixel_height
    return pixel_area, pixel_width, pixel_height
def main():
    parser = argparse.ArgumentParser(description='计算热成像仪每个像素对应的实际物体面积')
    parser.add_argument('fov_h', type=float, help='水平视场角 (度)')
    parser.add_argument('fov_v', type=float, help='垂直视场角 (度)')
    parser.add_argument('distance', type=float, help='拍摄距离 (米)')
    parser.add_argument('resolution_h', type=int, help='水平分辨率')
    parser.add_argument('resolution_v', type=int, help='垂直分辨率')
    args = parser.parse_args()
    pixel_area, pixel_width, pixel_height = calculate_pixel_area(args.fov_h, args.fov_v, args.distance,
                                                                 args.resolution_h, args.resolution_v)
    print(f"每个像素对应的面积: {pixel_area:.6f} 平方毫米")
    print(f"每个像素对应的宽度: {pixel_width:.6f} 毫米")
    print(f"每个像素对应的高度: {pixel_height:.6f} 毫米")
if __name__ == '__main__':
    main()
4. python脚本CIL使用方式
假设命名脚本名字为:fov_script.py
4.1. 获取帮助
python ./fov_script.py --help
终端返回如下
usage: fov_script.py [-h] fov_h fov_v distance resolution_h resolution_v
计算热成像仪每个像素对应的实际物体面积
positional arguments:
  fov_h         水平视场角 (度)
  fov_v         垂直视场角 (度)
  distance      拍摄距离 (米)
  resolution_h  水平分辨率
  resolution_v  垂直分辨率
options:
  -h, --help    show this help message and exit
4.2. 计算
假设
- 水平 FOV: 30度
- 垂直 FOV: 20度
- 图像分辨率: 320 x 240 像素
- 目标距离: 10米
python fov_script.py 30 20 10 320 240
返回结果
每个像素对应的面积: 237.982454 平方毫米
每个像素对应的宽度: 16.362465 毫米
每个像素对应的高度: 14.544413 毫米



















