基于OpenCV的立木测量方法研究

2018-03-21 09:27姜广宇夏其表
电脑知识与技术 2018年3期

姜广宇 夏其表

摘要:为提高立木测量的效率和精度,在分析立木信息采集现状的基础上,从像素比值关系构建立木的胸径测量模型出发,通过对手机相机图片使用VC++语言编译环境下调用OpenCV库函数进行镜头畸变校正、Gamma校正等图像处理,求解立木的胸径。经过试验验证,测量结果的相对误差比较小,在林业需求的测量范围内。

关键词:立木测量;镜头畸变校正;Gamma校正

中图分类号:TP18 文献标识码:A 文章编号:1009-3044(2018)03-0212-02

Abstract: In order to improve the efficiency and accuracy of standing tree measurement, this paper attempted to construct a measurement model of DBH from the ratio of pixels and performed lens distortion correction and Gamma correction by calling the OpenCV library function in a VC ++ language environment Processing to calculate the diameter of standing tree Based on analyzing the present situation of collection of standing tree information. The experiment results show that the relative error of the measurement results is relatively small and can meet the measurement range of the forestry demand.

Key words: standing tree measurement; Lens distortion correction; Gamma correction

对立木的测量是森林资源调查的重要工作之一,其测量结果和精度将直接影响森林资源调查的质量以及林木生长状况的分析[1]。传统的测量方法主要是使用布鲁莱斯测高器、卷尺等测量工具来测量立木,但有可能会导致外业测量的劳动量大。随着对林业调查数据的精准性的要求越来越高,产生了许多有关林业数据获取和分析的方法[2-5]。随着计算机视觉技术的日趋发展成熟,一些研究者利用计算机视觉技术进行图像处理获取立木信息。陶司光等利用数码相片进行阈值分割进行提取立木信息[6]。OpenCV计算机视觉库作为一种开源的库为数字图像的处理提供了极大的方便[7]。

本文根据立木测量的实际情况出发,从像素比值关系构建立木的胸径测量模型出发,通过对手机相机图片使用VC++语言编译环境下调用OpenCV库函数进行镜头畸变校正、Gamma校正等图像处理,最终求解立木的胸径。

1 胸径测量模型

在摄影测量时,物体的空间坐标转化为图像的像素坐标往往产生摄像机成像的不均匀性,无法满足所用的理想成像模型,在一定条件下物体的所占的像素个数基本不变,因此,在一幅图像中可以利用參照体上的某一线段的实际长度作为参照线段和目标立木胸径处长度所占的像素比值关系计算出立木的胸径长度[8]。图1是利用该原理的求解立木胸径的模型图。

图1中,M表示立木投影到图像中的胸径所占的像素值大小;N表示参照线段投影到图像中的长度所占的像素个数;(x,y1)表示A点的计算机图像坐标;(x,y2)表示B点的计算机图像坐标;(x,y1)和(x,y2)分别表示C点和D点的计算机图像坐标;H表示立木抽象出来的实际胸径长;L表示参照线段抽象出来的实际长度。H的单位为cm, L的单位为cm。根据像素个数比例关系,有如下基本关系:

2 镜头畸变校正

由于摄像机镜头固有属性和其在制造时的技术欠缺等因素的影响会导致镜头畸变的产生,从而出现了图像中实际的点与理性透镜模型的平面点偏差的现象,这就是图像的畸变[9]。摄像机的透镜主要是在成像仪的边缘产生显著的畸变,镜头畸变一般分为径向畸变、切向畸变。径向畸变主要表现为图像的实际像点偏移到了理想像点的径向方向的畸变误差,切向畸变主要表象为图像的实际像点偏移到了理想像点的切向方向的畸变误差,一般镜头失真的主要因素是径向畸变[8]。针对这种原因造成的图像畸变误差,本文使用OpenCV的calibrateCamera函数求畸变图像的内参和畸变参数,函数形式如下[10]。本文使用印有25mm×25mm的10×7黑白棋盘A4纸粘贴的标定板在墙上或者树上进行试验校正。

double cv::calibrateCamera ( InputArrayOfArrays objectPoints,

InputArrayOfArrays imagePoints,

Size imageSize,

InputOutputArray cameraMatrix,

InputOutputArray distCoeffs,

OutputArrayOfArrays rvecs,

OutputArrayOfArrays tvecs,

int flags = 0,

TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, DBL_EPSILON)

) 。

在得到内参和畸变系数后保存入XML文件或者文本文档中,下次使用即可将XML文件或者文本文档中数据导入相应矩阵,将具有内参和畸变系数的矩阵代入OpenCV的undistort函数来对采集到的立木图像进行畸变误差校正, 函数形式如下[11]。

void cv::undistort ( InputArray src,

OutputArray dst,

InputArray cameraMatrix,

InputArray distCoeffs,

InputArray newCameraMatrix = noArray()

)。

3 Gamma校正

在自然环境中,人们在采集图像的时候,或多或少都要受到光线的影响,这就容易产生图像中会存在光照不均匀的情况[12]。特别在光线受树冠影响的森林中采集的立木图像,更不利于对图像的分析处理。为了提高立木图像的质量,Gamma 矫正方法可以比较好的被用来处理光照对图像的影响[13]。Gamma校正主要修正图像显示设备和人类视觉系统对亮度成非线性关系而显示的误差[14]。Gamma校正是将原始输入值以1/gamma为指数的计算值进行预补偿处理来使输出值与图像的原始数据建立了线性关系而得到校正的效果[15]。不同的设备不同的环境,Gamma的取值不同,本文gamma使用的常用数值2.2即补偿值为0.45进行校正[16],使用OpenCV的函数对采集到的立木图像进行Gamma校正。主要使用pow函數对图像的像素矩阵进行0.45次幂的计算。可以设置浮点变量gam为1/2.2,然后将gam代入pow(S, gam,Y)函数,即将原图矩阵S进行1/2.2次幂的计算转换给了校正后的图矩阵Y。

读取的原始图像以及Gamma校正后的图如图2所示,校正后的图的亮度要比原图要清晰。

4 实验验证

本研究综合考虑立木测量的实际需求,使用手机进行拍照求胸径。首先在立木的胸径处即立木1.3米处绑定绳子环绕立木,然后在离立木2米远处进行水平拍照,最好保持脚与立木树根在同一水平面。使用opencv-3.0.0-alpha版本搭载visual studio2010环境下使用VC++语言进行编程设计。参照物使用前文中的25mm×25mm的10×7黑白棋盘求解其实际长度。使用卷尺获取7个样本立木的胸径分别是34.0cm,42.5cm,25.8cm,15.5cm,35.3cm,16.3cm,57.6cm,对该7个样本进行镜头畸变校正,Gamma校正后在图像中提取胸径处两点的像素,再使用本研究胸径测量模型计算得测量值分别为34.68cm, 40.95cm,26.11cm,16.57cm,34.63cm,17.8cm,56.1cm,平均相对误差为3.92%,最大相对误差为9.2%,最小相对误差为1.2%。相对误差最大的为胸径比较小的树,可能是胸径比较小的树在图像提取时候的胸径处的点误差比较大的缘故。经过实际应用,在相对比较平坦的平地上在一定的距离内能获取立木的胸径,测量结果的相对误差比较小在林业需求的测量范围内。

5 结束语

本文根据林业上的测量需求,利用拍摄到照片,使用OpenCV计算机视觉库对图像进行镜头畸变校正,Gamma校正后,使用本文的立木胸径模型进行求解立木胸径,所得结果相对误差在5%以内,为林业测量提供了新的方法的参考。实际测量中,还需更进一步的改进,使其能更有效的提供测量的方便。

参考文献:

[1] 陈颖,隋宏大,冯仲科,等. 2种树高测量方法的测量精度对比分析[J]. 林业调查规划,2009,34(6):1-4.

[2] 黄晓东,冯仲科,解明星,等. 自动测量胸径和树高便携设备的研制与测量精度分析[J]. 农业工程学报,2015,31(18):92-99.

[3] 赵芳,冯仲科,高祥,等. 树冠遮挡条件下全站仪测量树高及材积方法[J]. 农业工程学报,2014,30(2):182-190.

[4] 徐伟恒,冯仲科,苏志芳,等. 手持式数字化多功能电子测树枪的研制与试验[J]. 农业工程学报,2013,29(3):,90-99.

[5] 柳皓笛,李文彬,阚江明. 基于神经网络的立木枝干测量方法研究[J]. 湖南农业科学,2009(3):115-117,120.

[6] 陶司光,刘兆刚.基于数码相片图像三维信息提取技术的研究[J].森林工程,2010,26(3):90-93.

[7] 王福斌, 李迎燕, 刘杰,等. 基于OpenCV 的机器视觉图像处理技术实现[J]. 机械与电子,2010(6):54-57.

[8] 阮晓晓. 基于普通数码相机的测树因子识别研究[D]. 杭州:浙江农林大学, 2014.

[9] 李竹良, 赵宇明. 基于单幅图片的相机完全标定[J]. 计算机工程,2013, 39(11):5 -8.

[10] Open Source Computer Vision Library. Camera Calibration and 3D Reconstruction[EB/OL]. https://docs.opencv.org/3.2.0/d9/d0c/group__calib3d.html#ga3207604e4b1a1758aa66acb6ed5aa65d, 2017, 11.

[11] Open Source Computer Vision Library. Geometric Image Transformations[EB/OL]. https://docs.opencv.org/3.2.0/da/d54/group__imgproc__transform.html#ga69f2545a8b62a6b0fc2ee060dc30559d, 2017, 11.

[12] 李渤, 朱梅, 樊中奎. 非均匀光照图像自适应Gamma增强算法[J]. 南昌大学学报:理科版,2016,40(3):299-302.

[13] 杨金锋, 师一华, 熊兴隆. 光照处理中改进的Gamma 矫正方法[J]. 中国民航学院学报,2006,24(4):39-42.

[14] 彭国福, 林正浩. 图像处理中Gamma校正的研究和实现[J]. 电子工程师,2006,32(2):30-32, 36.

[15] 曾嘉亮. Gamma 校正的快速算法及其C语言实现[J]. 信息技术,2006(4):82-84, 108.

[16] Wikipedia English site. Gamma correction.[EB/OL].https://en.wikipedia.org/wiki/Gamma_correction, 2017,11.