APP下载

基于OpenCV-Python的木材缺陷图像分割教学软件

2021-02-25程玉柱

林业机械与木工设备 2021年1期
关键词:教学软件图像处理木材

程玉柱

(南京林业大学机械电子工程学院,江苏 南京 210037)

“金课”建设是当前本科教育的一个热点,是提高本科教学质量及一流专业建设的关键。图像处理技术可应用到林业生产、森林保护、环境检测等多方面。林业图像处理课程作为“金课”建设对象,要体现“高阶性、创新性、挑战度”[1-3]。图像分割是图像处理中的一个重要教学内容,OpenCV是一个开源重要的计算机视觉库,包含了大量的图像分割与识别函数,可以利用OpenCV-Python帮助学习图像分割的知识,培养学生解决复杂系统问题的能力,提高教学效果[4-6]。

图像分割算法有多种,主要包括传统法和语义分割法。传统法有阈值分割、聚类分析、泛函能量法、区域分析法、分类器法[7-10]。最新的语义分割为深度学习方法,有块分类、全卷积法、编码-解码结构、孔洞卷积法、条件随机场法等[11-14]。这些分割方法都可用于木材缺陷图像检测,实现图像分割软件的构建。

以深度学习为代表的人工智能技术是第四次工业革命的关键技术之一。Python语言是当前使用最广泛的深度学习编程语言,传统上图像处理教学大多采用Matlab的图像处理工具箱进行,Matlab的优势主要适合于科学研究,而Python软件既适合科研,也可以进行工程应用。大多数深度学习软件最新的应用多数是基于Python开发的,如卷积神经网络(convolutional neural network,CNN)等。因此,将OpenCV-Python引入到林业图像处理课程中很有必要,可突出“金课”的“两性一度”。以木材缺陷图像为研究对象,构建一套基于OpenCV-Python的木材缺陷图像分割教学软件,此软件包括绝大多数图像分割函数,同时便于扩展最新分割算法,帮助学生掌握基础理论,接触新知识及技术,锻炼学生的编程能力。

1 基于OpenCV的图像分割方法

1.1 OpenCV

OpenCV是一个开源计算机视觉和机器学习软件库,该库具有2 500多种优化算法,其中包括一整套经典和最新的计算机视觉和机器学习算法。这些算法可用于检测和识别面部,识别物体,对视频中的人为行为进行分类,跟踪相机运动,跟踪运动物体,提取物体的3D模型,从立体相机产生3D点云,将图像缝合在一起以产生高分辨率整个场景的图像,从图像数据库中查找相似的图像,从使用闪光灯拍摄的图像中消除红眼,跟随眼睛的运动,识别风景并建立标记以将其与增强现实叠加在一起等。它具有C++、Python、Java和MATLAB接口,并支持Windows、Linux、Android和Mac OS。OpenCV主要倾向于实时视觉应用,用C++原生编写,并具有可与STL容器无缝配合的模板化接口。

1.2 OpenCV-Python

Python是一种通用编程语言,由Guido van Rossum创建,是一种面向对象的解释型高级程序设计语言,主要特点为语法简单、清晰、优雅,能帮助编程者从语法规则中走出来,从而专注于解决问题,而且具有大量的第三方函数库,满足大量开发需求,其用户数量急速增长。OpenCV-Python是OpenCV的Python API,它结合OpenCV C++ API和Python的最佳特性语言,是一个Python绑定库,用于解决计算机视觉问题。对于像C/C++这样的语言,Python速度较慢。Python可以很容易地用C/C++来扩展,可以在C/C++中编写计算密集型代码,并创建可以用作Python模块的Python包装器。OpenCV-Python具有两个优点:第一,代码和原来的C/C++代码一样快(因为它是后台工作的实际C++代码),其次,在Python中比C/C++更容易进行编码。OpenCV-Python就是一个Python包装器,用于原始OpenCV C++实现,同时使用Numpy库,具有MATLAB风格的语法。所有OpenCV数组结构都可与Numpy数组进行转换。

1.3 图像分割分类

图像分割是图像处理的基本任务之一,把图像分成不同属性的目标和区域。本质上,可看成像素目标的检测、分类或识别问题,因此,机器学习及人工智能的相关理论都可以应用到图像分割的研究中。图像分割方法如图1所示,可将这些图像分割算法应用到木材缺陷检测中。

2 木材缺陷图像分割

2.1 平台搭建

开发平台在Window 10 下构建,主要包括Anaconda、PyCharm、OpenCV库等。Anaconda是Python的一个开源发行版本,包括conda、python等180多个科学包及其依赖项。Anaconda官网下载地址为http://www.anaconda.com/download/,其版本可随时更新。下载得到安装软件,根据指示按步骤安装至完成。PyCharm是一种简单易用的编辑器,可采用开源版本PyCharm Community,下载地址为Http://www.jetbrains.com/pycharm/download/#section=windows,下载安装软件,根据指示按步骤安装至完成。OpenCV-Python有以下三种安装方法:① PyCharm的Project Interpreter中的界面安装;②PyCharm的Terminal中pip install opencv-python指令安装;③从https://www.lfd.uci.edu/~gohlke/pythonlibs/下载OpenCV 的Whl文件后直接安装,此方法不需要额外编译,稳定不易出错。

图1 图像分割方法

2.2 算法实现

图像分割方法较多,为了便于说明Python实现过程,本文以阈值分割为例加以说明。利用PyCharm编程,用import命令导入cv2、skimage、matplotlib库,利用cv2.imread读取图像,利用skimage.filters.threshold_*函数实现图像阈值分割。*表示有10种方法,包括local()、mean()、minimum()、niblack()、sauvola()、triangle()、isodata()、li()、yen()、otsu(),示例代码如图2所示。运行代码得到分割结果,如图3所示,不同的阈值方法有不同的分割结果。方法可分成局部阈值和全局阈值两类,局部阈值有local()、niblack()、sauvola();其他的七种为全局阈值。左上方为木材缺陷RGB彩图,经过灰度化后得到灰度图,然后利用10种阈值分割方法得到各自的分割结果。

2.3 算法比较分析

利用四种评价指标ACC、SOB、SEN和SPE[15-20],其定义如式1所示。对10种图像分割方法进行比较计算,得到指标结果,见表1。方法分成局域法和全局法两类,Sauvola在局域法中算法最优,Isodata在全局法中算法最优。

图2 示例代码

图3 阈值分割

(1)

式中:TP为正确的正样本;FP为错误的正样本;FN为错误的负样本;TN为正确的负样本。

表1 算法性能

3 教学软件应用与扩展

根据图1中的图像分割分类方法,利用PyCharm的集成开发环境,实现多种图像分割,分割结果如图4所示。图4(a)~(c)分别为K-均值、均值漂移、FCM;(d)~(f)分别为CV模型、MRF模型、Graph模型;(g)~(h)分别为区域增长、分水岭;(i)~(j)分别为支持向量机(SVM)和卷积神经网络(CNN)。其中大部分都采用OpenCV库中的函数实现,相对应的辅助库可通过pip install命令进行安装,例如,CNN可采用Tensorflow深度学习框架进行编程。

本软件只是初步实现了图像分割的一些算法,可在此软件基础上进一步改进或扩展,方便学生学习和创新。图像语义分割(Semantic Segmentation)是图像处理和机器视觉技术中关于图像理解的重要一环,也是 AI 领域中一个重要的分支。语义分割是对图像中每一个像素点进行分类,确定每个点的类别(如属于背景、人或车等),从而进行区域划分。目前,语义分割已经被广泛应用于自动驾驶、无人机落点判定等场景中。传统的方法为TextonForest和基于随机森林分类器等,而深度学习方法有块分类、全卷积法、编码-解码结构、孔洞卷积法、条件随机场法等。利用此软件,可灵活地使用OpenCV与TesnsorFlow及PyTorch等框架结合,实现多种语义图像分割算法,方便学生快速掌握深度学习和人工智能的基础知识。

图4 图像分割

4 小结

(1)以“图像分割”作为林业图像处理课程的教学内容,进行图像处理“金课”建设,构建一套基于木材缺陷图像分割的教学软件。

(2)以“OpenCV-Python”为实现方式,利用Win10+Anaconda搭建开发平台,开发了多种阈值分割方法,比较了木材缺陷分割的性能。

(3)以“卷积神经网络”为创新点,预留分割教学软件的扩展余地,与Skimage、Tensorflow等Python库相结合,提升“金课”建设效果。

猜你喜欢

教学软件图像处理木材
传承·创新·引领:虚拟教学软件在高中生物学教学中的应用与推广
海战场侦察图像处理技术图谱及应用展望
人工智能辅助冠状动脉CTA图像处理和诊断的研究进展
橘子皮用来开发透明木材
虚拟教学软件在高职院校汽车维修实践教学中的应用
数字说
木材在未来建筑设计中的应用分析
基于ARM嵌入式的关于图像处理的交通信号灯识别
基于图像处理的废有色金属自动分选算法研究
加纳木材工业界呼吁政府减免木材进口税以挽救国内木材工业