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 毫米