基于预处理图像压缩的病害诊断应用研究

2020-07-15 05:01刘小红
计算机技术与发展 2020年7期
关键词:服务端灰度预处理

刘小红

(湖南信息学院,湖南 长沙 410151)

0 引 言

近几年农业灾害研究已成为热点,随着手机应用的不断普及和拍摄图像方便的特点,已有国内外学者利用Android手机结合图像处理技术在病害或虫害诊断方面开展了深入研究,如文献[1-4]等提到将Android手机端采集的病害或虫害图像直接上传至远程服务端,服务端对接收的图像进行相应的处理分析并返回结果。这些研究虽能解决Android手机端图像处理能力有限和本地Sqlite数据库检索能力不足的问题,但是,在进行病害或虫害图像远程诊断时,需上传病害或虫害特征清晰的大容量图像,会导致上传速度缓慢、消耗数据流量、增大服务端图像数据处理难度,影响图像识别的及时性,因此对图像数据进行压缩处理成了解决此问题的重要方法。图像压缩就是去除冗余,减少图像数据大小并加速上传,提高图像输出的信噪比[5]。文献[6-7]提到在Android平台下对图像进行JPEG压缩编码,虽能高效地压缩图像,减少图像数据和加速图像上传速度,但是针对病害图像,在较高图像压缩比的情况下,病害特征清晰度得不到保障,不利于服务端后期的图像分析和处理,加上病害图像因拍摄环境、手机像素等影响,在压缩中加大图像特征的模糊度,增加服务端对图像识别的处理难度,从而影响识别的及时性或准确性。

基于以上问题,文中以黄瓜病害图像为研究对象,在移动端对其进行诊断,采用基于预处理的JPEG图像压缩方法进行处理后再上传,确保在图像病害特征清晰的前提下,可减少病害图像数据大小、加快上传速度、提高远程诊断的及时性和准确性。

1 系统模型设计

论文主要包括两部分:图像预处理压缩过程和诊断平台APP。前者将病害图像进行预处理后继续压缩,减少病害图像数据量;后者利用预处理压缩技术实现对采集的病害图像进行数据处理后并上传诊断,加速图像上传速度,及时获取相关病害的诊断信息。

图像预处理是提取病害图像中的病害区域,需要进行图像分割,而OpenCV正是一种可以进行图像灰度化、图像转换、图像分割等各种操作的跨平台图像处理库,在手机端应用OpenCV进行图像病斑分割非常适合[8]。因此系统Android开发环境中需配置OpenCV图像处理库。图像压缩处理则对提取的病斑图像在手机端进行压缩,达到减少图像大小、加快上传速度这一目的。Bitmap类中的compress方法是Android系统中最常用的图像压缩方法,但图像压缩效率不是很高[9]。JPEG2000图像压缩标准虽在压缩效率、性能等方面很出色,但需配备专用压缩芯片,常应用在图形图像处理设备上[10]。JPEG图像压缩标准在合适的压缩比率下,它能在图像存储大小和图像质量之间得到折衷,同时不需要配备专用压缩芯片,在手机端采用JPEG图像压缩标准处理图像最合适,因此系统开发环境需配置支持JPEG压缩编码和解码功能的Libjpeg图像处理库[11]。

1.1 预处理过程

文中主要以黄瓜的白粉病、斑点病、炭疽病、霜霉病等几种病斑图像作为研究样本,如图1所示。

图1 图像样本

在Android端实时采集的黄瓜病斑图像,需进行裁剪,去除多余部分,减少图像大小。裁剪后的病斑图像包含叶片健康区域和病害区域,这两种区域从视觉上分别以绿色和非绿色二种颜色相交错。要获取病斑区域,需要对图像进行分割去除健康区域。在图像分割方法中,阈值分割法具有计算简单、速度快和效率高等优点,不受图像亮度和对比度影响,广泛应用于数字图像分割处理[12-14]。因此系统中采用此方法进行病斑分割,即病害图像先裁剪、再灰度化、最后利用最大类间方差法(即OTSU算法)进行图像分割。OTSU算法是将灰度化图像归一化处理后,利用阈值将图像分成背景和前景两部分,循环计算背景和前景之间的类内方差,求取类内方差为极大值时对应的阈值即为最佳分割阈值[8]。

Otsu阈值分割过程如下:

(1)计算灰度化病害图像的归一化直方图,得到图像灰度级1~M,总像素数为N,则第i级灰度出现的概率为:Pi=ni/N。

(3)计算直方图的零阶w[k]和一阶矩μ[k]:

对一级矩作以下处理:w1=1-w[k];μ0=μ[k]/w[k];μ1=[μ-μ[k]]/[1-w[k]]。

(4)利用公式σ2[k]=w0(μ-μ0)2+w1(μ-μ1)2找到最大的类间方差,对应此方差最大的灰度值即为要找的阈值,k从1~M变化。

(5)利用计算得的阈值进行图像分割。

图像预处理过程设计:在移动端将黄瓜病斑图像,先进行适当裁剪;然后编写灰度化程序,调用OpenCV中的cvCvtColor()方法,并设置参数code值为CV_BGR2GRAY,将原图RGB空间转成灰度化的目标图;最后利用OTSU算法将灰化图像进行分割,去除图像非病斑区域,实现病斑区域的提取。OpenCV中主要有固定阈值、自适应阈值两种分割方法,其中threshold()方法是对单通道数组进行固定阈值操作[15]。由于病害图像经过灰度化后,图像中的灰度不均匀,病斑特征边缘明显度有所降低,如果采用固定阈值分割法来处理,效果比较差。而自适应阈值分割即adaptiveThreshold()方法能根据图像亮度分布的不同,相应地改变阈值,对各个区域出现不同颜色或亮度的病斑,分割的效果比较好。

图像预处理实验的效果如图2所示。

1.2 图像压缩过程

系统压缩的关键是将自适应分割出的病斑区域进行压缩处理。压缩后不仅缩小图像数据大小、节省存储空间,还能保存重要的病害信息,方便后期图像处理。JPEG压缩方法采用顺序编码模式,主要有离散余弦变换(DCT)、量化、哈夫曼编码等几个过程[6]。

图2 图像预处理示意图

在病害图像进行阈值分割后进入压缩处理过程,先将图像以8×8进行分块,再对各个分块进行DCT变换即空间域数据转换到频率域数据,此时病斑数据主要集中在低频分量上,非病斑数据分布在高频分量上。要滤除高频分量,保留低频分量,需要进行量化处理,利用JPEG亮度和色差量化表通过量化公式对DCT系数进行量化[16-17]。接着将载有病斑信息的低频分量采用Huffman编码形式进行编码,形成JPEG位图数据流。最后将数据流进行译码生成JPEG图像。压缩流程如图3所示。

图3 JPEG图像压缩流程

JPEG图像压缩过程如下:

(1)JPEG压缩处理是针对图像Y(亮度)Cr(色度)Cb(饱和度)颜色空间,手机在田间收集的实时图像是RGB色彩空间,进行DCT变换前,要将其转换为YCrCb色彩空间,其中采样比例Y∶Cb∶Cr =4∶1∶1,再将图片划分为8×8的小块。

(2)DCT变换(即离散余弦变换),在JPEG压缩过程中,需将图片空间域数据转换到频率域数据即对每个图像分块后,再采用DCT变换公式进行变换[7]。

(3)量化经DCT变换后,图像主要信息以低频分量形式集中在矩阵左上角,其他则为高频分量聚集点。量化过程中滤除高频分量,保留低频分量,达到压缩的目的。方法是:DTC变换后的频率系数除以JPEG亮度量化矩阵和色差量化矩阵进行量化取整[7]。

(4)编码,JPEC压缩过程中采用Huffman编码,将图像数据组成JPEC位图数据流,以方便传输、存储和译码器进行译码。

移动端的压缩方式有尺寸压缩(即设置图像采样率来降低像素并减少图像本身容量大小)、质量压缩(即不减少像素前提下降低图像质量)以及通过JNI调用Libjpeg库来进行压缩,本系统中采用后者进行压缩[18]。系统中不涉及算法和计算,编写程序直接调用库中方法如jpeg_start_compress、jpeg_finish_compress等,方法中包含了压缩过程的相关代码,将图3的全部过程进行处理。压缩过程设计步骤为:(1)对JPEG图像对象进行空间分配,并初始化。(2)获取压缩文件源。(3)设定压缩参数,如图像宽、高、色彩通道数、色彩空间、压缩比率等。(4)指定压缩后的图像存储文件。(5)开始压缩并显示压缩效果图。(6)压缩完毕,释放资源。

2 诊断APP设计与实现

本系统在移动端对黄瓜病害图像进行诊断,需要满足两大功能:病害查询、病害诊断。因此在APP端要包含病害查询、图像获取、图像预处理、图像压缩、图像诊断等几大功能,其中图像预处理包括图像裁剪、灰度化、图像分割等。系统功能结构设计如图4所示。

从功能结构上分析,用户登录成功后,系统提供病害查询和病害诊断两大主要功能。系统处理流程设计主要从两方面进行:(1)选择病害查询模块,即进入黄瓜热门病害界面,选中相关病害图像,系统从远程数据库中调用并显示相关病害的基本信息、发病规律、防治方法等;(2)选择病害诊断模块,即进入病害图像获取功能,通过启用照机进行拍照或从相册中获取图像,并裁剪;下一步,进入图像预处理界面,对病害图像进行灰度化处理,并利用OTSU算法进行病斑分割,去除背景和提取病斑区域,显示分割后的图像效果;下一步,进入压缩处理界面,选择相关的压缩比率、图像宽和高等参数,将提取的病斑图像进行JPEG压缩,压缩完后显示效果图;最后将处理后的图像上传服务端,服务端监听到处理请求后,建立连接并接收图像,进行相关的处理和诊断,将诊断信息返回给手机端。系统处理流程如图5所示。

图4 系统功能结构设计

图5 系统处理流程

系统界面设计,采用人机交互友好的原则,操作简单。“返回”就进入上级操作,“下一步”就进入下级处理,点图标按纽后进入相关参数的设定,点“确定”后系统根据对应的参数进行图像数据处理,再“返回”就能看到处理后的效果图。实现界面如图6、图7所示。

图6 获取图像界面 图7 图像预处理界面

在自适应阈值分割功能实现中,采用OpenCV中的自适应阈值法即adaptiveThreshold( )进行病害区域的分割,根据需要设定此方法相关参数,方法代码如adaptiveThreshold(mGray,mAd,255,mADAPTIVE,THRESH_BINARY_INV,5,5),其中将灰度化后的图像数组变量作为第一个参数;将输出的分割图像数组变量作为第二个参数;第三个参数设定满足条件最大值255;第四个参数值设为ADAPTIVE_THRESH_MEAN_C,为自适应阈值算法参数,并计算出邻域的平均值再减去第七个参数的值;阈值类型设为THRESH_BINARY_INV;像素邻域大小设定为5,计算像素阈值。在压缩功能实现中,先设定JPEG对象为cf,并调用jpeg_create_compress()方法初始化对象,且声明错误处理器,并赋值给cf.err域;然后指定压缩后的存放文件,且以二进制模式打开;再设定压缩参数:因预处理后的图像为灰度图,色彩空间值设定为JCS_GRAYSCALE(灰色),压缩比率rate为用户输入值,需调用jpeg_set_quality (cf, rate, true)方法;接着调用jpeg_start_compress()进行压缩;最后调用jpeg_finish_compress(cf)压缩完毕再调用jpeg_destroy_compress(cf)释放压缩对象。

3 实验与分析

在Android端将黄瓜的斑点病、白粉病、霜霉病、炭疽病等几种病斑图像作为样本进行实验,经图像预处理压缩后,分别记录原始图像、处理后图像的压缩耗时、视觉效果、数据大小、上传速度等数据,实验数据如表1、表2所示。表1实验数据表明压缩倍数越低,压缩质量等级就越高,视觉效果就越好,但是压缩后图像数据量还是很大,不利于数据的快速上传。相反,设定压缩倍数越高,质量等级就越低,压缩后图像数据就越小,但压缩效果就很差,会影响图像的病斑特征清晰度,不利于后期服务端接对图像数据的识别和诊断处理。因此,本系统采用压缩质量等级范围为40~60之间,压缩倍数在50%左右,图像数据量大小相应减少,压缩视觉效果较好。

表1 图像压缩实验数据

表2数据表明,在图像大小方面:相比原始图像,分割后图像数据大小减少30%左右;再按压缩比50进行压缩,图像数据大小又减少50%左右。在上传速度方面:相比直接上传的原始图像,压缩后图像上传速度提高24%左右;分割并压缩后图像上传速度提高35%左右。在耗时方面,图像经过分割并采用哈夫曼算法进行压缩处理,虽在手机本地耗时最长,但上传速度最快;图像不经过分割处理仅压缩,虽在手机本地耗时较短,但上传速度较慢;原始图像直接上传速度最慢。

表2 实验记录数据

从以上测试数据看出,在移动端对图像进行自适应的阈值分割后,再采用合适的压缩比进行压缩,不仅减少图像数据大小,还能较好地保持视觉效果。图像在压缩过程中采用哈夫曼算法进行编码,虽然在本地耗时长了点,但能加速上传,减少数据流量。相比没有经过预处理压缩的图像,在上传速度及远程服务端对图像数据的快速处理方面更具有一定的优势。

4 结束语

为减少大图像数据大小,加快上传速度、降低服务端图像处理难度,提出在移动端病害诊断平台上对图像进行预处理并分割出病斑后,再进行离散余弦变换、量化、哈夫曼编码等压缩这一方法。实验结果表明,利用此方法在保证良好压缩视觉效果的前提下,可大幅降低图像数据大小达50%以上,提高图像上传速度达20%以上。但也存在一些问题,比如利用OTSU方法进行阈值分割时,只能针对病斑明显的图像进行处理,病斑区域很少或者病斑区域与绿色区域区别度不是很高时,分割不准确;在手机端进行图像病斑分割时,虽能减少服务端的图像处理负荷,但由于手机硬件性能问题,导致分割时长增大等,这些问题在后续的研究阶段还有待改进。

猜你喜欢
服务端灰度预处理
航空滤光片阵列多光谱图像条带灰度调整算法
KR预处理工艺参数对脱硫剂分散行为的影响
预处理对医用外科口罩用熔喷布颗粒过滤性能的影响
采用改进导重法的拓扑结构灰度单元过滤技术
手术器械预处理在手术室的应用
天津港智慧工作平台灰度发布系统和流程设计
污泥预处理及其在硅酸盐制品中的运用
Arduino小车巡线程序的灰度阈值优化方案
多人联机对战游戏的设计与实现
基于三层结构下机房管理系统的实现分析