文/曹野
制作樂器時,共鳴板材的選擇過程長期依靠人力進行評判,這種依賴性使得此過程過于主觀,且受評估者的經驗、情緒以及環境光線等多種因素的影響[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算子選材,能夠顯著提高選材的成功率,實現了古琴板材的初步篩選。然而,共鳴板材的選擇并非只能依賴于紋理,材質的振動特性也是需要考慮的重要因素,材質紋理與振動特性之間的關系有待進一步研究和探索。