APP下载

基于计算机纹理分析和支持向量机的古琴面板品质预测①

2024-04-18沈阳音乐学院辽宁沈阳110000

关键词:古琴木材纹理

曹 野 (沈阳音乐学院,辽宁 沈阳 110000)

古琴,还拥有许多别称:如由于组成古琴的主要材料是丝弦和桐木,因此被称为“丝桐”;又如使用玉石等华贵材料制作的古琴,则被称为“瑶琴”“玉琴”[1];古琴在历史演变过程中,形成了标准的七根弦构造,因此被广泛地称为“七弦琴”[2]。直到19世纪20年代,为了与钢琴区别开,才改称为古琴,并沿用至今[3]。古琴是中国传统拨弦乐器中的一种,它拥有悠久的艺术历史,有明确的文字记载和形象描绘,其可考的历史上限距今已超过3000年,而关于古琴的传说典故则可以追溯到更早的时期[4]。古琴曾被作为礼器和律法工具,加之历代统治者和文人的喜爱和推崇,使得它在汉文化中地位崇高,有“士无故不弹奏琴瑟”和“左手弹琴右手书写”的说法,在中国传统四艺(琴棋书画)中居首位,被视为高雅的代表[5]。目前对古琴的前沿研究大多采用机器学习或现代设备等手段进行。有学者使用机器学习方法来研究古琴音乐恢复问题,试图通过古琴乐谱来恢复每个音符的时值[6];也有学者通过物理传感技术来数字重建一件传统的中国古琴弦乐器,以邀请人们用身体去解读这件古典乐器[7];还有学者描述了一种基于Kinect传感器的新颖虚拟古琴应用程序的设计与实现,其目的是唤起用户对古琴的兴趣[8]。当前,对于古琴的音质性能研究相对较为稀缺。尽管学者们积极探索机器学习和现代设备等新技术应用,用以恢复音乐、数字重建乐器,设计虚拟应用以激发用户兴趣,然而对古琴音质的深入研究却少有。对古琴音色、共鸣特性等方面的认知的深入挖掘,有助于进一步理解和保护这一古老而独特的音乐文化遗产。

古琴被广泛认为是一种非常重要的音乐传播工具,其特有的共鸣箱设计可以有效地放大并优化弹奏出的音频,通过空气的振动,使音乐的传播更加迅速、顺畅。共鸣箱的面板无疑是其中最重要的组成部分。面板的主要职责不仅是实现音频的共鸣,更是在音乐播放的过程中传递和分配能量的关键环节。通过精确的设计和工艺制作,面板可以确保音乐在传播过程中的纯粹和醇厚[9]。目前,大多数古琴的面板采用泡桐木制作,其对泡桐木材的纹理、年轮宽度、裂痕等都有较高要求[10]。极少数定制且价格高昂的古琴会使用年代久远的横梁木、棺木等“老木”材料[11],这种选材方式并不常见。现在,古琴的木材选择还停留在主观判断阶段,完全依赖于制琴师傅的个人经验,通过观察、抚摸、敲击、聆听等方式进行主观评价[9],尽管这样的选择方式在一定程度上提供了参考依据,但其显然缺乏科学的支持和具体的量化标准。这样的评估过程并没有明确的规则和规范,因此可能会引发多种问题:包括但不限于错误的判断、较大的误差、效率的低下,以及产品质量的不稳定性。这些问题都可能会对最终的决策结果产生负面影响,降低决策的精确性和有效性。因此需要更加科学、规范的方法来改善这种情况,提高决策效率和准确性。周力等从振动与声学的角度去分析与总结古筝的制作,初步探讨了弦乐器面板与纹理的关系[12];傅明鉴等从制作的角度探讨了古筝的音质、音色、装饰及市场等问题[13]。然而,关于古琴音质与其面板纹理之间的关联,相关研究却相对匮乏。虽然前沿研究在利用机器学习和现代设备进行音乐恢复、数字重建以及虚拟应用的方面取得了显著进展,但对古琴构造材料的微观特性与音响表现之间的关系的研究尚待加强。探索古琴音质与木制面板纹理之间的关联将有助于更全面地理解这一乐器的声学特性,为保护和传承古琴音乐文化提供更为深刻的理论基础。

纹理是自然界中无处不在的一种现象,它反映了事物的组成要素在分布和特征上的某种规律,特别是与外形或手感等质量相关的规律。通常会将纹理定义为视觉图像中由于灰度或色彩分布的特定模式而形成的一种具有明显有序性的现象。这种有序性可能体现在图像的各种方面,包括但不限于颜色的深浅变化、图像区域的边界分布、图像内的形状和结构等。这种有序性不仅为理解和解析视觉图像提供了重要的线索,也为图像的进一步处理和分析提供了基础。因此,将那些在图像的局部区域内表现出不规则性,但在整体视角下又显现出明显规律性的特征定义为纹理。[14]这种特征可能在图像的局部区域内表现为颜色、亮度或形状的不规则变化,但在更大的视角下,这些不规则的变化却形成了一种明显的规律性。[15]Hawkins对纹理给出了更为全面的描述:首先是某种局部“模式”在更大面积内不断重复;其次,这个排列顺序由基本单元的非随机组合构成;最后,各单元大体上是均匀的整体,纹理区域的任意位置结构尺度基本相近。[16]木材完全符合评判纹理的三大要素,因此被广泛认为是典型的具有纹理的物质。由于木材天然的各向异性属性,在不同的角度进行切割时,就会呈现出各种不同的纹理图案,其纹理特征是木材生长轮、木射线、轴向薄壁组织等解剖分子相互交织所形成的。生长轮是这些纹理的主要来源,其中包括导管、管胞、木纤维、射线薄壁组织等微观细胞结构。这些细胞在微观层面上形成了生长轮,因此无论从哪个角度进行切割,都会看到近似平行的非交叉的线条或曲线图案。[14]这些线条和图案共同构成了木材切面独特的纹理特性,也是木材被广泛应用于各种场合的重要原因之一。[17]对于木材的纹理特性进行具体地分析,会发现不同切面的纹理图案有着明显的差异。如观察木材的横截面,其纹理图案类似于同心圆的形状,这是由木材生长轮的特性决定的。相反,如观察木材的径切面,其纹理图案主要由平行的条纹构成,这些条纹通常与木材的生长方向平行。而在弦切面上,木材的纹理线条则呈现出近似于抛物线的形状,这由木材的各向异性和切割角度的变化所导致。在现代科学研究中,主要通过使用图像处理技术来对这些纹理特性进行客观地研究和分析。这种技术不仅可以帮助更准确地理解和描述木材纹理的特性,也为木材的进一步加工和应用提供了重要的技术支持。

纹理一般分为两大类型。第一种类型是规则纹理,这种纹理是由具有明确形状的组成部分按照一定的规则和模式排列而成的,因此通常被人们称为人工纹理。其特点是其构成部分形状明确,排列有序,容易被人们识别和理解。另一种纹理类型则截然不同,它的构成部分并没有明确的形状,而是由某种颜色的分布模式构成。这种分布模式在空间中不断重复,形成了具有特定规律性的纹理。然而,这种规律性在局部视角下常常难以察觉,只有在整体视角下才能得以体现。这种纹理同时具有局部的不规则性和整体的有序性,因此通常被人们称为自然纹理。这两种纹理类型在许多领域都有广泛的应用,包括但不限于图像处理、计算机视觉、机器学习等。[14]作为自然界纹理的一种典范,木材纹理以其独有的特征和图案形式,与其他自然纹理存在显著的区别,这种“自然”的特征,也是木材纹理的独特魅力所在。纹理是理解和鉴别木材的重要线索,对于木材给人的感官体验和木制品的经济价值具有直接的影响。这种影响不仅体现在对木材本身的认知上,也体现在对木制品经济效益的评估中。与关注木材的密度和强度类似,木材的颜色以及纹理等属性也在木材质量的检测中起着至关重要的作用。这些特性不仅被看作是评判木材质量和决定木材产品价值的关键指标,而且也被视为挑选高质量装饰和家具木材的重要材料特性参考标准。虽然纹理始终被认为是至关重要的,但往往难以准确地表达出来:因为木材纹理的种种变化,包括丰富复杂的微观结构,不同的树种产生的各种不同的纹理等。虽然这些纹理中蕴含了一定的规律,但很难通过简单明了的数学语言来进行表达。目前关于木材表面纹理的表达和分析的研究,基本上还停留在定性分析为主,定量分析为辅的阶段。[14]而人眼对纹理的识别,也不可避免地存在着如主观性、局限性、持久性不足以及模糊性等问题。这就使得对木材纹理的研究变得更加困难和复杂,需要采取更多的方法和办法,以便更好地理解和描述木材纹理。

计算机科技的快速发展和计算机视觉以及模式识别技术的日益成熟,为木材纹理的研究带来了可能。木材纹理的研究,已经成为计算机视觉和模式识别领域的关键研究项目,是此领域的潜在前沿领域。目前一些尖端的算法已经诞生,其中包括:灰度共生矩阵分析的方法、灰度梯度共生矩阵分析的技术、随机场分析的策略、分形几何学分析的方式以及小波多分辨率分析的法则等。这些创新的技术提供了新的途径来描述纹理特性,从而不再依赖于传统的几何学和数学分析的描述方法。[14]相反从纹理的宏观特性、微观特性、统计规则或者频谱特性等多个角度进行描述,因此更适用于复杂且结构丰富的自然纹理的描述和分析。在这些方法中,基于数据的机器学习是现代智能技术的关键部分。[18]它从观测数据中发现规律,用这些规律预测未来数据,包括模式识别、神经网络等。在无需人工干预的环境下,智能控制的实质是模拟人类的思考模式,以此来实施对复杂系统的自主驱动控制。这种独特的技术,能针对那些难以构建有效数学模型的系统进行定量和定性的结合控制分析,同时也拥有实时推理决策和识别的能力。[19]目前,智能控制技术已在各个科学研究领域获得了广泛的应用。作为这项关键技术的核心组成部分,支持向量机在定量分类层面展现出了其独特的预测优势,同时在模式识别环节也有出色的表现,有着广泛的应用潜力。支持向量机通过最小化结构化风险,有效提升了其学习的泛化能力,只需要少量样本,就能在学习的精度和能力之间找到最佳的平衡,从而实现最优的推广能力。在学习过程中,支持向量机能对数据进行深入分析和模式识别,从而实现分类和回归分析。智能技术在木材科学领域的应用主要包括木材表面颜色模式识别、木材材质预测、木材缺陷分类等方面。[19]Mallik等的主要研究对象是利用扫描电子显微镜放大1500倍后的微观图像并结合线性判别分析 (LDA)、二次分类、逻辑回归、K 最近邻 (KNN)、朴素贝叶斯、支持向量机 (SVM) 和神经网络等方法对木材进行分类。[20]Barmpoutis等提出了一种基于纹理分析的木材识别新方法[21]。Pramunendar等提出使用自适应多层感知器(AutoMLP)和支持向量机(SVM)对椰子木材质量进行分类的实验方法。[22]为了自动检测木材表面缺陷,Song等提出了一种基于图像块百分比颜色直方图和特征向量纹理特征分类的方法。[23]Ibrahim等使用了一个模糊预分类器配合一组支持向量机(SVM)来管理大规模木材数据库并有效分类木材种类。[24]为了简化识别过程,Sugiarto等使用了计算机视觉中的方向梯度直方图(HOG)提取木材特性和支持向量机(SVM)对木材进行分类。[25]自然中存在大量难以鉴定的木材种类,即使对专家来说也很困难。PAN等提出一种新的方法,结合近红外光谱(780nm—2300nm)和灰度共生矩阵纹理特征,实现对木材的准确快速识别。[26]Ibrahim等提出了一种称为局部二值模式(LBP)的有效特征提取技术,配合常用的支持向量机(SVM)进行分类。[27]由此可见,过去大多研究集中在利用图像分析和机器学习技术探讨木材物种的不同分类和识别方法,而用计算机分析识别乐器音板纹理并结合基于数据的机器学习来预测音板等级的研究还不多,特别是在中国传统乐器古琴方面的研究更为罕见。此外,图像采集和分析过程操作简便,经过简单训练后即可快速掌握。本文拟应用支持向量机结合古琴共鸣板材质纹理特征进行板材筛选预测。

一、材料与数据收集

选用泡桐古琴面板77张,材料均来自沈阳音乐学院音乐科技系弦乐器制作团队,含水率在辽宁省沈阳市4月中旬时为15%左右。其中21张用于构建训练数据集,56张使用训练好的模型对测试数据集进行分类预测。首先对选取的77张古琴面板进行编号,在面板轮廓制作完毕阶段对所有古琴纹理进行采集,之后进行合琴(面板和背板结合)操作,并上紧琴弦,保证能够演奏。为避免油漆对音色音质的影响,后续演奏时保持未上漆状态。图像采集选用佳能850D相机,垂直挂起于被采集区域上方,高度2.5m。平行于相机左右各设置1台伞式灯罩,增加光照,去除重影。镜头选择佳能50mm定焦镜头,光圈f1.8,感光度ISO100,快门速度1/125秒。为避免抖动采用远程快门操作,采集后的图像直接输出RAW无损格式到计算机。之后采用专家评价法对所收集的77张古琴的音质进行了全面的评审。在这项研究中,特邀了沈阳音乐学院在民族乐器制作和教学领域有着丰富经验的专家邵申弘、卢向忱等,对制成的77张古琴进行打分,得分情况如表1所示。对于评估项目及其标准,借鉴了中华人民共和国国家标准GB/T16463-1996《广播节目声音质量主观评价方法和技术指标要求》的相关规定[19],并对乐器的音质进行了五级评定。具体而言,“一等”被视为5分,这象征着音质的卓越;“二等”被标记为4分,反映了音质的优秀;“三等”被标记为3分,显示了音质的良好;“四等”被标记为2分,代表了音质的普通;“五等”被标记为1分,表示音质较差。在进行评价时,参考了专业的音质评价数据,包括音色的优美度、高音的明亮度、中音的柔和度、低音的浑厚度、音域的连贯性、声音的纯净度以及表现的层次感等7项指标进行实地评分。根据得分的高低,将每种乐器分为1—9级。其中,1—3级被定义为高档乐器,4—6级被定义为中档乐器,而7—9级则被定义为低档乐器[19],如表1所示。

表1.古琴等级专家打分表

为了实现编程的便利性以及对分类预测的优化,本研究选择Python作为主要的编程语言。Python是一种由Guido van Rossum所开发的通用编程语言,其因简洁的语法和高度可读性而迅速受到广泛的欢迎,目前最新的版本是Python3。在本次试验中,使用的操作系统是Windows11,而编程软件则是Pycharm,这是一款含有全套能够在使用Python语言进行开发的过程中提升效率的工具的编程软件,例如调试工具、语法高亮显示、项目管理、代码跳转、智能提示、自动完成、单元测试以及版本控制等功能。[28]对于Python库的运用,库在这里被理解为具有相关功能模块的集合。在本研究中,使用到的库包括了Numpy、OpenCV、Scikit-image以及Scikit-learn等。用图像处理软件对采集的图像进行剪切、旋转,之后在Pycharm中进行去除背景操作,过程如下:

1.将彩色图像转换为灰度图像,并使用OpenCV的threshold函数对其进行二值化处理,得到前景和背景的二值图像thresh。使用形态学操作对thresh进行开操作,得到背景的掩模sure_bg。

2.使用距离变换算法,对thresh进行距离变换,得到距离变换图dist_transform。通过ret,sure_fg = cv2.threshold(dist_transform,0.7★dist_transform.max(),255,0)得到前景的掩模sure_fg。

3.使用OpenCV的subtract函数对背景掩模和前景掩模进行相减,得到未知区域掩模unknown,然后,使用 cv2.dilate()函数对图像进行膨胀操作,以便消除任何小的前景物体,确保图像的背景被准确分离。用一个$3 imes 3$ 的卷积核进行操作,并重复该操作三次。

4.利用 cv2.distanceTransform()函数计算距离图,以确定每个非零像素到最近零像素的距离。使用cv2.DIST_L2作为距离类型,并使用一个$5 imes 5$的卷积核进行操作。

5.使用一个阈值来确定哪些像素属于前景区域,哪些像素属于背景区域。使用 cv2.threshold()函数,使用 Otsu’s 二值化方法确定阈值。使用阈值的$70%$作为前景区域的阈值,然后将前景区域二值化为白色($255$)像素。

6.利用cv2.subtract()函数从膨胀后的背景图像中减去前景图像,以便确定不确定的区域,即前景和背景区域之间的边缘。然后使用cv2.connectedComponents()函数将前景区域分割成多个连通组件。由于该函数仅能处理8位的单通道图像,因此需要将前景区域转换为无符号的8位整数格式。

7.利用cv2.watershed()函数将分割标记应用到原始图像上,并将分割后的图像分配给不同的分割区域,使用 markers 数组中的值来标记原始图像中的分割区域,并在分割区域周围绘制红色边界。

8.使用cv2.imshow()函数显示原始图像和去除背景后的图像,如图1所示。

图1.去除背景后的古琴图像

二、纹理要素提取

根据之前的研究[29],选取连续纹理数、断裂纹理数、最长纹理值、最短纹理值、平均间距、平均角度、最大角度为定量目标。其中连续纹理定义为横向相邻2个纹理间像素值小于等于2;断裂纹理定义为横向相邻2个纹理间像素值大于2;最长纹理值和最短纹理值的单位为mm;角度为纹理方向与水平方向夹角的绝对值。定量定义如下:

连续纹理数(Continuous texture count),指的是在给定区域内连续出现的无中断纹理或图案的数量,横向相邻2个纹理间像素值小于等于2。

断裂纹理数(Disrupted texture count),指的是在给定区域内被中断或打断的纹理或图案的数量,横向相邻2个纹理间像素值大于2。

最长纹理值(Longest texture value),指的是在给定区域内最长的连续纹理或图案的长度,单位为mm。

最短纹理值(Shortest texture value),指的是在给定区域内最短的连续纹理或图案的长度,单位为mm。

平均间距(Average spacing),指的是在给定区域内连续纹之间的平均距离,单位为mm。

平均角度(Average angle),指的是在给定区域内连续纹理之间的平均角度,角度值为纹理方向与水平方向夹角的绝对值。

最大角度(Maximum angle),指的是在给定区域内任意两个连续纹理之间的最大角度,角度值为纹理方向与水平方向夹角的绝对值。过程如下:

1.导入必要的库:cv2、numpy、matplotlib。

2.使用cv2.imread()函数读入图像,并将其转换为灰度图像。

3.对灰度图像进行高斯滤波,以平滑图像并减少噪声。

4.使用Canny边缘检测算法来检测图像中的边缘。

5.使用cv2.findContours()函数寻找图像中的轮廓。

6.使用cv2.drawContours()函数在一张黑色背景上绘制轮廓,生成包含轮廓的图像。

7.使用cv2.HoughLines()函数检测直线。该函数使用霍夫变换来检测直线,可以检测直线的位置和角度。

8.使用cv2.imwrite()函数将绘制的轮廓图像和直线图像保存到磁盘上,如图2所示。

图2.纹理要素识别图像

对生成的图像进行定量分析,过程如下:

1.使用PIL库中的Image模块读取图像文件,然后将其转换为灰度图像。

2.将灰度图像进行二值化,得到一个二进制图像。

3.利用skimage.morphology中的二值图形态学操作去除噪声并连接纹理区域。

4.利用skimage.measure中的label()和regionprops()函数,对二值化后的图像进行连通组件分析和纹理特征计算,得到不同区域的相关信息,如区域大小、面积、形状、周长等。

5.使用skimage.feature中的local_binary_pattern()函数,提取灰度图像的局部二值模式(LBP)特征,并统计横向相邻的两个像素之间的差值小于2的像素对的数量。

6.最后输出计算结果,包括连续纹理数、断裂纹理数、最长纹理值、最短纹理值、平均间距、平均角度和最大角度,结果保存为CVC文件。结果如表2所示。

表3.训练集的错误预测样本,预测等级和误差

表4.预测集的错误预测样本,预测等级和误差

(三)支持向量机分类预测

对CVC文件进行必要的格式编辑,把编号1—21以及22—77的古琴分割为2组,便于使用Python进行读取操作。之后使用SVM进行面板等级预测,过程如下及图3所示。

图3.支持向量机分类预测过程

1.使用pandas库创建一个DataFrame数据结构,其中包括77个样本的连续纹理数、断裂纹理数、最长纹理值、最短纹理值、平均间距、平均角度和最大角度等特征,以及所对应的3个不同专家打分的等级。

2.选取21个样本来构建训练集。

3.读取剩余56张古琴的相同特征数据作为预测集。

4.使用scikit-learn库中的svm.SVC函数构建SVM分类器,设置核函数为线性核函数,正则化参数C为1.1,自适应核函数系数gamma为auto,构建SVM模型。

5.使用fit函数在训练数据集上进行模型训练。

6.使用predict函数对训练好的测试数据集进行分类预测,得到预测标签。

7.使用matplotlib库绘制原始标签和预测结果,比较两者之间的差异。

8.将预测结果保存到DataFrame中,与原始测试数据合并,将结果保存为.xlsx文件。

结 论

表格3呈现了训练集中错误样本的实际等级与预测等级的误差对照,其中认定误差超过±0.3的样本为分类错误[19]。图4展示了古琴共鸣板训练集预测的乐器等级与专家评分的乐器等级分类图。从结果可以观察到,在21个训练样本中,只有1个样本的预测等级出错,由此计算得出,训练集预测等级分类的正确率高达95.23%,大部分样本误差在±0.2范围内变动,显示了训练集与实际乐器等级的误差较小,训练结果相当准确。表格4列出了预测集中错误样本的实际等级与预测等级的误差对照,误差超过±0.3的被视为分类错误[19]。图5是古琴共鸣板预测集训练出的乐器等级与专家评分的乐器等级分类图。从图中可以看出,在56个古琴共鸣板素材样本中,有2个样本的预测等级出错,据此计算得出,古琴等级分类预测的正确率达到96.42%,大多数样本误差在±0.2范围内变动,显示预测集的误差较小。验证过程的分类结果充分证明了该模型具有良好的泛化性。

图4.训练集预测等级与专家评分等级分类图

图5.预测集预测等级与专家评分等级分类图

本研究初步探索了将支持向量机算法应用于古琴面板木材纹理分析的可行性,并尝试建立面板质量预测模型。研究表明,支持向量机算法可以提取部分木材纹理特征,并训练出具有一定分类准确度的预测模型。这为传统古琴制作经验提供了新的参考,也为古琴面板材料的选取开辟了新的思路。但是,由于研究时间和样本量有限,研究结果还需进一步验证。这种将传统工艺与前沿科技相结合的创新思路,可能为古琴文化的传承提供一些启发。后续研究需在方法论和样本量两个方面进行优化与提升,以产生更系统可靠的研究结果。总体而言,本研究对支持向量机在古琴面板质量预测中的应用进行了初步探索,并提示了这一领域的进一步研究方向,为古琴传统智慧和现代技术的有机结合提供了有益的尝试。

猜你喜欢

古琴木材纹理
◆ 木材及木制品
世界上最轻的木材
橘子皮用来开发透明木材
寻琴记:古琴的前世今生
基于BM3D的复杂纹理区域图像去噪
张俊波 情寄古琴,乐以忘忧
使用纹理叠加添加艺术画特效
寻访千年古琴
古琴的收藏价值在何处
TEXTURE ON TEXTURE质地上的纹理