古琴面板纹理的边缘检测与矢量化
2023-10-13曹野
文/曹野
制作乐器时,共鸣板材的选择过程长期依靠人力进行评判,这种依赖性使得此过程过于主观,且受评估者的经验、情绪以及环境光线等多种因素的影响[1]。最近几年,随着计算机处理能力的加强与提升,借用计算机视觉识别技术进行板材分析的研究方法受到了广泛的关注和重视[2]。在视觉识别的各种技术中,边缘检测方法作为主要的分析手段,以Canny算子的应用最为普遍。然而,在使用传统的Canny算子时,需提前设定阈值,而阈值的大小对于分析结果有显著影响。Canny算子在计算纹理间距以及平均纹理间距的过程中,需要消除纹理宽度本身对于计算结果的影响,这将会使得计算量增加,相应也会提高测量的难度[3]。Zhang-suen算法作为经典的并行细化算子,因其运算速度快且易于操作,被广泛应用在各个领域[4]。然而,这种方式生成的图像大多为传统的位图,尽管这种类型的图像方便于保存和查看,但进行如物体编辑、保持图像清晰度的缩放等,将面临困难[5]。相比之下,经过矢量化处理的图像具有可编辑的属性,如变形、融合等;同时可以忽略位图的分辨率限制,可以自由地进行放大和缩小[6]。二者结合生成的矢量图像对古琴共鸣板的纹理研究有一定价值,为后续研究如板材纹理与乐器发声质量之间的关系奠定了基础。
一、材料与方法
(一)供试材料
泡桐古琴面板20张,材料均来自沈阳音乐学院音乐科技系弦乐器制作团队,含水率在辽宁省沈阳市4月中旬时为15%左右。
(二)预处理过程
图像采集选用佳能850D相机,垂直挂起于被采集区域上方,高度1m。平行于相机左右各设置1台伞式灯罩,增加光照,去除重影。镜头光圈f1.8,感光度ISO100,快门速度1/125秒。采集图像直接输出RAW无损格式到计算机。
Canny算子在确定边缘点的过程中会遵循以下几个具体的算法步骤:
利用高斯滤波器对图像进行平滑处理;通过一阶偏导的有限差分计算出梯度的幅度和方向;
对梯度幅度进行非极大值抑制;采用双阈值算法对边缘进行检测和连接。然而,在这一过程中,也存在着以下的缺陷:高斯滤波器的大小会直接影响Canny算法的输出结果。使用较小的滤波器所产生的模糊效果较轻,可以用于检测小尺寸且变化明显的线条。而较大的滤波器所产生的模糊效果较重,可以将较大的图像区域涂成一个特定的颜色值,这对于检测大尺寸且平滑的边缘更为有效,例如彩虹的边缘。如果阈值设置过高,可能会丧失重要的信息;如果阈值设置过低,则可能会对边缘信息进行过度解读。对于所有图像来说,很难找到一个通用的阈值设定。
Zhang-Suen细化算法常被视为一种迭代处理方式,该迭代过程主要分为两个阶段:
阶段一:对所有的前景像素点进行遍历,对于满足以下特定条件的像素点,将其标记为待删除:
像素点P1的相邻像素点数量N(P1)应在2到6之间;P1到P2,再到P9,然后回到P2的像素中,从背景到前景的累计变化次数S(P1)应为1;P2、P4和P6三者的乘积应为0;P4、P6和P8三者的乘积应为0。在此,N(P1)是指与P1相邻的8个像素点中,前景像素点的数量。而S(P1)是指在从P2到P9,再回到P2的像素中,从背景转换为前景的累计次数,其中0代表背景,1代表前景。对于完整的P1到P9的像素位置及其示例,发现N(P1)=4,S(P1)=3,P2×P4×P6=0×0×0=0,P4×P6×P8=0×0×1=0,由于这并不满足前述条件,因此无需将其标记为删除。
阶段二:这一阶段与阶段一极其类似,条件1和2与阶段一完全相同,只是条件3和4有所不同。如果像素P1满足以下条件,将其标记为待删除:像素点P1的相邻像素点数量N(P1)应在2到6之间;P1到P2,再到P9,然后回到P2的像素中,从背景到前景的累计变化次数S(P1)应为1;P2、P4和P8三者的乘积应为0;P2、P6和P8三者的乘积应为0。将以上两个阶段进行循环,直到在两个阶段中都没有像素被标记为删除。此时,得到的结果即为二值图像经过细化处理后的骨架。
之后以Zhang-Suen细化算法对所采集的RAW图像进行遍历及迭代计算,在得到细化图像后代入Canny算子进行边缘点求解运算。此过程中Zhang-Suen细化算法可以去除伪影、光照的影响及后续阈值的人为选取,从而优化边缘检测算子。
(三)矢量化过程
目前市面上存在众多的算法和工具用于实现矢量化,然而每种算法和工具都具有其独特的优势和局限性,以适应各种不同的应用环境和需求[7]。本次实验中,采用Potrace库,验证步骤如下:
导入所需的库:numpy,potrace,PIL(Python Imaging Library)。加载光栅图像,并将其转换为灰度图像。将图像转换为布尔值:创建一个新的bitmap,对应于原图像的像素值大于128的部分,值为True。对应于原图像的像素值小于等于128的部分,值为False。使用potrace库的Bitmap函数创建一个新的bitmap对象,然后调用transform方法来对bitmap进行变换,将bitmap转换为SVG格式的矢量图像。
二、结果与分析
(一)纹理图像提取实验结果
图1为传统Canny算子提取的纹理图像矢量化的结果,图2为Zhang-suen 算法细化对传统Canny算子进行改进后矢量化的结果。
图1 传统Canny算子提取的纹理图像
图2 Zhang-suen 算法细化对传统Canny算子进行改进后的提取的纹理图像
通过细致的对比分析,可以明显地发现,图2相较于图1在处理大量虚假边缘和纹理断裂方面有了显著的改善。此外,图2对于板材本身的纹理宽度进行了优化和提取,能够更客观地反映纹理的走势。这一改进使得纹理之间的宽度变化得以更为精确地表现,从而便于后续步骤的计算,并且优化了伪影对实验结果的影响。这种优化和提取的过程,不仅增强了图像的清晰度,也提供了更多的信息,以便于进行更为深入的研究和分析。
(二)纹理图像矢量化实验结果
图3为传统Canny算子提取纹理图像的矢量化图形,图4为Zhang-suen算法细化对传统Canny算子进行改进后提取纹理图像的矢量化图形。
图4 Zhang-suen 算法细化对传统Canny算子进行改进后提取纹理图像的矢量化图形
观察可知,优化后的算法对于矢量化的支持度显著提升,生成的图像相较于之前的版本,伪影现象大幅度减轻,纹理的断裂问题也得到了显著的改善。经过一系列的优化处理,算法的性能得到了显著的提高,能够更有效地进行矢量化处理,生成的图像质量更高,更加清晰,对于后续的研究和分析工作提供了重要的支持。
(三)结果验证
现阶段,图像矢量化的评估方法多种多样,针对不同的原始图像,所采用的评价方法也有所不同[8]。对于像板材纹理这样的相对简单且清晰的图像,评价方法主要包括以下几个方面:矢量化后生成图形的数据量;数据量的大小直接影响着矢量纹理的断裂程度,同时,也与数据的传输速度有关。因此,理想的情况是数据量越少越好。矢量化后生成图形的精确度;精确度是衡量生成图像与原始格栅图像相似度的重要指标,只有它们的差异不大,这个矢量化过程才能被认为是有意义的。整个过程所需的时间涉及矢量化算法的效率问题,时间越短,效率越高。整个过程操作的方便程度涉及用户体验问题,操作越简便,用户体验就越好[9]。然而,目前尚无完全适用所有情况的评价指标。本文采用光栅化图像的像素最大误差Emax、像素平均误差Eave以及像素平均误差模长Enorm,与矢量化后的对应值进行对比,作为检测古琴面板矢量化的检测指标,步骤如下:
1.导入numpy、cv2。
2.确保原始图像和重建图像具有相同的尺寸,将图像转换为浮点数据类型便于后续的数学运算。
3.对于每个像素,计算原始图像和重构图像的相应颜色组件(R、G和B)之间的绝对差异。
4.计算最大像素误差,表示为Emax。通过识别所有像素的颜色差异之和的最大值,然后乘以13。
5.计算平均像素误差,表示为Eave。这是通过将所有像素的颜色差异相加,然后将结果除以13和像素总数(图像的宽度×高度)得到的。
6.计算像素平均误差规范,表示为Enorm。这涉及到计算颜色差异平方和的平方根,然后将此值除以像素总数。
最终节选结果如下表所示:
表1 调律和平均律演进
以上三种验证方式误差值总体小于0.6,表明矢量化效果总体较好。
三、讨论
Zhang-suen算法结合Canny算子选材方式的简单、高效,而且无需复杂仪器的辅助。采用光栅化图像的像素最大误差Emax、像素平均误差Eave以及像素平均误差模长Enorm,与矢量化后的对应值进行对比,作为检测古琴面板矢量化的检测指标。实验结果表明,Zhang-suen算法结合Canny算子相比于肉眼选材和传统的Canny算子选材,能够显著提高选材的成功率,实现了古琴板材的初步筛选。然而,共鸣板材的选择并非只能依赖于纹理,材质的振动特性也是需要考虑的重要因素,材质纹理与振动特性之间的关系有待进一步研究和探索。