劉為相,李燦,張霞,周作建,宋懿花
(南京中醫(yī)藥大學(xué),江蘇 南京 210000)
在生物醫(yī)學(xué)工程、神經(jīng)網(wǎng)絡(luò)和多種優(yōu)化算法的不斷發(fā)展和完善下,人工智能已經(jīng)進(jìn)入了臨床診斷的范疇。舌診所需的圖像可利用模式識(shí)別等算法進(jìn)行處理,使中醫(yī)舌診的發(fā)展進(jìn)入了一個(gè)全新的階段,大大促進(jìn)了中醫(yī)舌診客觀化、規(guī)范化的進(jìn)程,對(duì)中醫(yī)舌診的繼承與創(chuàng)新有舉足輕重的作用。在量化研究中,最常用的是RGB(紅綠藍(lán))模型,不同類型舌診影像RGB數(shù)據(jù)存在差異,說(shuō)明利用電腦影像技術(shù)進(jìn)行舌診客觀化分析是切實(shí)可行的,但是現(xiàn)有的舌象處理技術(shù)中,大多以[1]RGB模型為基礎(chǔ)對(duì)舌象顏色值的修正,而在舌診圖像去噪方面沒(méi)有相關(guān)研究。
K-SVD(K-Singular Value Decomposition)算法是目前最具有代表性且應(yīng)用領(lǐng)域最廣泛的自適應(yīng)學(xué)習(xí)字典算法。MALLAT首先提出了圖像的超完全信號(hào)稀疏表達(dá),利用Gabor詞典對(duì)圖像進(jìn)行稀疏表示,并將其用于圖像稀疏表達(dá)。稀疏和冗余表示技術(shù)是目前信號(hào)和圖像處理領(lǐng)域的一個(gè)主要的研究領(lǐng)域,包括稀疏搜索、圖像銳化、字典構(gòu)造、人臉圖像壓縮、圖像去噪、圖像修補(bǔ)以及圖像尺度放大等研究領(lǐng)域。由此提出基于字典學(xué)習(xí)算法對(duì)中醫(yī)舌診圖像降噪的研究,并分別通過(guò)單層字典去噪及深度字典去噪兩種方式做出對(duì)比,放大實(shí)驗(yàn)效果[1]。
預(yù)處理部分包括對(duì)比度拉伸、直方圖均衡化、空間平滑濾波以及空間銳化濾波,流程見(jiàn)圖1。其中空間平滑濾波包括均值濾波以及中值濾波,空間銳化濾波包括Sobel算子以及Laplacian算子。
圖1 數(shù)據(jù)集預(yù)處理流程圖
假設(shè)原始樣本為Y,字典矩陣為D,原子為dk,稀疏矩陣為S,矩陣乘法為DX。字典學(xué)習(xí)的主要思想是利用包含K個(gè)原子dk的字典矩陣D∈Rm×K,稀疏線性表示原始樣本Y∈Rm×n(其中m表示樣本數(shù),n表示樣本屬性),即有Y=DS(最理想情況)[2],其中S∈RK×n為稀疏矩陣,上面的問(wèn)題可以被用數(shù)學(xué)語(yǔ)言表示為下面的最優(yōu)問(wèn)題:
上式中,S為稀疏編碼的矩陣,si(i=1,2,…,K)為該矩陣中的行向量,代表字典矩陣的系數(shù)?!瑂i‖0表示零階范數(shù),它表示向量中不為0的數(shù)的個(gè)數(shù)[3]。
式(1)的目的函數(shù)表達(dá)式是為了盡量減少查找到的詞典和原始樣本之間的誤差,也就是盡量恢復(fù)原來(lái)的樣本;它的限的制條件‖si‖0≤T0,表示查字典的方式要盡可能簡(jiǎn)單,即X要盡可能稀疏。式(1)或式(2)是一類具有限制的最優(yōu)化問(wèn)題,它可以通過(guò)拉格朗日乘子方法進(jìn)行求解。
注:將‖si‖0用‖si‖1代替,主要是更加便于‖si‖1求解。
在此,有兩個(gè)最優(yōu)變量D,S為了求解該優(yōu)化問(wèn)題,通常會(huì)將一個(gè)最優(yōu)變量固定,然后對(duì)另外一個(gè)最優(yōu)變量進(jìn)行優(yōu)化,這樣交替進(jìn)行。接下來(lái)稀疏矩陣可以S利用已有經(jīng)典算法求解,如Lasso(Least Absolute Shrinkage and Selection Operator)、OMP(Orthogonal Matching Pursuit)。其中以更新字典D為例:
假設(shè)X是已知,逐列更新字典,當(dāng)僅更新字典的第k列時(shí),記dk為字典D的第k列向量,記SkT為稀疏矩陣S的第k列向量。那么對(duì)式(1)有:
因此,需要求出最優(yōu)的dk,skT[4]。這是一個(gè)最小二乘問(wèn)題,它可以用最小二乘法來(lái)解決,也可以用SVD法來(lái)解決。但不能用Ek進(jìn)行求解,否則求得的新的skT不會(huì)被稀疏化。因此需要將Ek中對(duì)應(yīng)的skT不為零的位置提取出來(lái),得到新的Ek。假設(shè)需要更新第0列原子,需要將skT中為0的位置找出來(lái),然后把對(duì)應(yīng)Ek的位置刪除,得到E'k,此時(shí)優(yōu)化問(wèn)題可描述為
因此求得最優(yōu)的dks’kT。
取左奇異矩陣∪的第一個(gè)列向量u1=∪(·,1)作為dk,即dk=u1。取右奇異矩陣的第一行向量與第一個(gè)奇異值的乘積作為x‘kT,即s‘kT=∑(1,1)VT(1,·)。得到S‘kT后,將其對(duì)應(yīng)地更新到原SkT。
稀疏模型剔除了大部分的冗余變量,僅保留了最接近于反應(yīng)變量的解釋變量,從而使模型更加簡(jiǎn)單,但又能保持最關(guān)鍵的信息,從而解決了許多問(wèn)題。由此可發(fā)現(xiàn),稀疏模型所達(dá)到的效果與字典學(xué)習(xí)的目的一致,都是要將冗余的無(wú)關(guān)緊要的信息刪除;而將重要的、本質(zhì)的信息得以保留[5]。也正因如此,“字典”的衡量標(biāo)準(zhǔn)也就隨之產(chǎn)生,字典創(chuàng)建的好與壞主要取決于它這個(gè)模型夠不夠稀疏(也就是說(shuō)提取的特征是否足夠關(guān)鍵,是否足夠本質(zhì))[6]。
首先進(jìn)行對(duì)Patch切塊的函數(shù)定義:通過(guò)np.copy(data)將數(shù)據(jù)載入,隨后定義Patch的邊長(zhǎng)及patch_size=8。其次完成對(duì)形狀及數(shù)據(jù)類型的定義shape=(9,620 01,8,8),dtype=np.float32。之后確定對(duì)共9張圖片進(jìn)行處理,每張圖片大小為(256,256),通過(guò)定義所有行的每1格標(biāo)注一次,再進(jìn)行每1列的每格標(biāo)注一次,由此完成對(duì)切塊函數(shù)的定義。
高斯噪聲單層去噪:首先使用高斯噪聲訓(xùn)練字典。根據(jù)zscore的規(guī)范化方法,將數(shù)據(jù)中的數(shù)據(jù)除以平均除以方差。然后,對(duì)MiniBatchDictionaryLearning類進(jìn)行初始化,并根據(jù)初始參數(shù)對(duì)類別進(jìn)行初始化。
完成上述步驟后開(kāi)始繪制V中的字典:
利用figsize方法指明圖片的大小,4.2英寸寬,4英寸高。其中一英寸的定義是80個(gè)像素點(diǎn)。循環(huán)畫(huà)出100個(gè)字典V中的字(其中n_components是字典的數(shù)量)。Enumerate()函數(shù)通常在 for循環(huán)中使用,把一個(gè)可遍歷的資料物件合并成一個(gè)索引序列,并列出資料和資料下標(biāo)。
隨后6個(gè)參數(shù)與注釋后的6個(gè)屬性對(duì)應(yīng),left,right,bottom,top,wspace,hspace分別對(duì)應(yīng)(0.08,0.02,0.92,0.85,0.08,0.23)此時(shí)已完成從高斯噪聲的圖像中提取字典并準(zhǔn)備開(kāi)始高斯噪聲的稀疏表示。
通過(guò)differents=[]得出復(fù)原圖片和原圖的誤差,transform_algorithms為字典表示策略。
接下來(lái)先通過(guò)調(diào)用remove_files()函數(shù)清空此文件夾中之前的文件,然后利用set_params()函數(shù)來(lái)設(shè)定第二個(gè)相位的參數(shù)。transform是基于set_params來(lái)建立一個(gè)已設(shè)置的參數(shù)的模型的詞典,它代表了一個(gè)code中的結(jié)果。code共有100個(gè)欄,每個(gè)欄都對(duì)應(yīng)一個(gè)V中的詞典單元,而所謂的“稀疏”是指代碼中每個(gè)行的大多數(shù)元素都是0,因此可以用最小的詞典元素來(lái)表達(dá)。
隨后用code矩陣乘V得到復(fù)原后的矩陣patches及樣本(62 001,64)=稀疏表示(62 001,256)*過(guò)完備字典(256,64)。這一階段結(jié)束還原數(shù)據(jù)預(yù)處理:patches +=gaussian_mean,將patches從(62 001,64)變回(62 001,8,8)。隨后通過(guò)reconstruct_from_patches_2d()函數(shù)將patches重新拼接回圖片。以psnr_score作為復(fù)原圖片和原圖的誤差計(jì)算并得出,最終展示去噪復(fù)原圖并重命名完成保存。
椒鹽噪聲單層字典去噪方式與上述相同,不再贅述。
基于深度學(xué)習(xí)的降噪技術(shù)是當(dāng)前圖像處理中的一個(gè)熱點(diǎn)問(wèn)題。在此基礎(chǔ)上,設(shè)計(jì)了對(duì)應(yīng)的網(wǎng)絡(luò)結(jié)構(gòu),獲取了關(guān)鍵特征,并對(duì)輸入和輸出的對(duì)應(yīng)關(guān)系進(jìn)行了研究。在完成一定數(shù)量的圖像采樣后,可以得到充分的信息,如圖像特征、數(shù)據(jù)分布等信息,隱含去除噪聲,達(dá)到去除噪聲的目的,原理見(jiàn)圖2。本研究中的深度學(xué)習(xí)為兩層網(wǎng)絡(luò)層。在輸入圖像過(guò)后,在對(duì)圖像進(jìn)行降噪處理時(shí),采用了卷積運(yùn)算,抽取有用的特征,并采用非線性映射進(jìn)行判斷推理,并采用判別式學(xué)習(xí)方法獲得圖像降噪前的信息,達(dá)到了對(duì)噪聲的分離[7]。
圖2 深度去噪原理圖
其中,卷積神經(jīng)網(wǎng)絡(luò)(CNNs)是最典型的深度學(xué)習(xí)類降噪算法,而CNNs則是一種改進(jìn)的DNNs結(jié)構(gòu),也就是LeNet網(wǎng)絡(luò)的5級(jí)結(jié)構(gòu),并在分類工作中脫穎而出。之后的研究通過(guò)對(duì)圖像數(shù)據(jù)的存儲(chǔ)和運(yùn)算的限制,改進(jìn)了LeNet的網(wǎng)絡(luò)架構(gòu),并在ImageNet的比賽中,通過(guò)GPU訓(xùn)練出8個(gè)層次的AlexNet,它的分類精度提高了11%。
二者均屬典型CNN,CNNs結(jié)構(gòu)的主要構(gòu)成元素為負(fù)責(zé)抽取主要圖像特征的卷積層(Convolution layer),同時(shí)加上激活函數(shù)(Activation function)的非線性映射作用可以加快網(wǎng)絡(luò)的收斂速度。當(dāng)前,在深度學(xué)習(xí)的研究中,大量標(biāo)準(zhǔn)化技術(shù)也被用于加快網(wǎng)絡(luò)的訓(xùn)練。將這些功能各異的網(wǎng)絡(luò)層結(jié)合起來(lái),可以構(gòu)造出不同層次的網(wǎng)絡(luò),從而完成復(fù)雜的圖像處理[8]。
①卷積層。它是CNNs與其他神經(jīng)網(wǎng)絡(luò)的一大特色,其主要作用是對(duì)多個(gè)卷積核進(jìn)行卷積,從而實(shí)現(xiàn)對(duì)圖像的局部特征的提取。卷積運(yùn)算實(shí)質(zhì)上是對(duì)相應(yīng)的位置要素進(jìn)行加法運(yùn)算,在一個(gè)CNNs中,有多個(gè)縱深的卷積層,每個(gè)卷積層內(nèi)都有若干個(gè)不同的卷積核,因此可以進(jìn)行多個(gè)卷積運(yùn)算。與粗略地進(jìn)行一次卷積運(yùn)算不同,多層多次的卷積運(yùn)算不但能提取出較淺的區(qū)域內(nèi)的圖像特征,并且可以從圖像中提取出更深層次的語(yǔ)義特征。如果卷積層是一個(gè)矩陣卷積層,那么它就是一個(gè)特操作不但可以提的特征圖,而卷積且還層則是一個(gè)特殊的特征映射,但是它也是矩陣形式。在卷積運(yùn)算完成后,每個(gè)卷積層都會(huì)通過(guò)一個(gè)具有非線性近似功能的激活函數(shù),并把新的特征映射結(jié)果輸入到下一層次。
②池化層和完全連通層。在具體的任務(wù)環(huán)境中,并不是所有的特性信息都能起到很大的作用,所以池化層的功能主要是篩選重要的特征數(shù)據(jù),過(guò)濾掉多余的數(shù)據(jù),增強(qiáng)了網(wǎng)絡(luò)的普遍性。最大池是最大池和平均池,通常使用最大池方法來(lái)保持較高的紋理信息。在CNNs中,全連接層通常在網(wǎng)絡(luò)的末尾,但在網(wǎng)絡(luò)的最終輸出端。全連通層是將各層的各節(jié)點(diǎn)與各層的節(jié)點(diǎn)連接起來(lái)的,所以在這一層中,所有的特征信息都集中在一起,從而能夠集成分布的特點(diǎn)。然而,由于全連接層的存在,會(huì)產(chǎn)生許多冗余的參數(shù),因此,目前通常都是以卷積層或池化層來(lái)進(jìn)行網(wǎng)絡(luò)性能的優(yōu)化。
③激活函數(shù)。為了增強(qiáng)網(wǎng)絡(luò)的逼近能力來(lái)模擬任意復(fù)雜的函數(shù),一般在線性卷積操作之后使用激活函數(shù)強(qiáng)化神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)能力,常用的激活函數(shù)有四類:Sigmod,Tanh,ReLU,Leaky。ReLU函數(shù)是當(dāng)前深度學(xué)習(xí)中應(yīng)用最為頻繁的一個(gè)非線性激活函數(shù),它具有簡(jiǎn)單、高效的特點(diǎn),能夠有效地解決深度學(xué)習(xí)中的梯度消失問(wèn)題。ReLU的函數(shù)表達(dá)式為:F(x)=max(0,x)。實(shí)驗(yàn)采用了ReLU和Sigmoid作為激活函數(shù),配合完成深度去噪。首次定義dico1時(shí)將字典的數(shù)量即n_components定義為144,當(dāng)再次進(jìn)行第二層卷積時(shí),將dico2的字典數(shù)量定義為256,通過(guò)兩次卷積完成深度字典學(xué)習(xí)。
當(dāng)前有效的深度降噪算法多為有監(jiān)督學(xué)習(xí),要求對(duì)輸入輸出的圖像進(jìn)行采集(Noisy/noise-free images pairs)建立數(shù)據(jù)集合是一個(gè)重要的工作。數(shù)據(jù)的質(zhì)量是影響降噪效果的重要因素。如何盡可能多地采集到大量的影像資料,并得到高品質(zhì)的參考影像(ground truth)是當(dāng)前的一個(gè)重要課題。本課題數(shù)據(jù)集來(lái)自江蘇省中醫(yī)院,該數(shù)據(jù)集收集了來(lái)自不同患者的陰虛證和非陰虛證舌診圖片,數(shù)據(jù)集涵蓋500個(gè)樣本,每個(gè)樣本均包含了舌診圖像和對(duì)應(yīng)的臨床標(biāo)注信息。在數(shù)據(jù)預(yù)處理中,對(duì)舌診數(shù)據(jù)進(jìn)行了預(yù)處理及對(duì)應(yīng)的噪聲去除,統(tǒng)一提升了舌診圖像質(zhì)量。
對(duì)去噪實(shí)驗(yàn)結(jié)果利用峰值信噪比(PSNR)的值進(jìn)行比較,其中利用到diff、MSE以及PSNR[9]。為了衡量經(jīng)過(guò)處理后的影像品質(zhì),通常令其結(jié)果與原圖像進(jìn)行對(duì)比。PSNR計(jì)算公式為:
其中,MSE為兩個(gè)m*n單色圖像I和K殘差值的平方,I為無(wú)噪聲原圖像,K為I的噪聲近似,MSE計(jì)算公式為:
在采集過(guò)程中,數(shù)字圖像中的高斯噪聲是最主要的來(lái)源。傳感器的噪聲是因?yàn)楣饩€不好或溫度過(guò)低所造成的。在圖像處理中,利用空間濾波技術(shù)可以有效地消除高斯噪聲,但由于圖像的平滑會(huì)造成圖像的邊緣和細(xì)節(jié)的模糊。常用的降噪方法主要有平均(卷積)濾波、中值濾波、高斯平滑[10]。
實(shí)驗(yàn)對(duì)椒鹽和高斯噪聲對(duì)應(yīng)的深度和單層字典去噪結(jié)果做了組內(nèi)和組間對(duì)比,見(jiàn)表1、圖3、圖4,對(duì)比標(biāo)準(zhǔn)為PSNR值。結(jié)果就組內(nèi)而言,單層字典學(xué)習(xí)對(duì)舌象去噪有效,且深度字典學(xué)習(xí)去噪對(duì)舌象去噪效果要優(yōu)于單層字典學(xué)習(xí)去噪。組間對(duì)比發(fā)現(xiàn),字典學(xué)習(xí)算法對(duì)高斯噪聲去噪的效果無(wú)論是單層還是深度都優(yōu)于對(duì)椒鹽噪聲的去噪。
表1 PSNR值對(duì)比表
圖3 高斯噪聲去噪展示圖
圖4 椒鹽噪聲去噪展示圖
實(shí)驗(yàn)選取了中醫(yī)舌診圖像去噪作為研究對(duì)象,結(jié)合當(dāng)下熱門(mén)的字典學(xué)習(xí)算法(KSVD)領(lǐng)域,通過(guò)主動(dòng)添加噪聲對(duì)比在不同情況下單層字典學(xué)習(xí)和深度字典學(xué)習(xí)所展現(xiàn)出的不同的去噪能力,并輔以對(duì)比度拉伸、直方圖均衡化等功能對(duì)舌診圖像進(jìn)行預(yù)處理。本實(shí)驗(yàn)以中醫(yī)舌診圖像去噪方法實(shí)現(xiàn)作為研究對(duì)象,研究了字典學(xué)習(xí)算法對(duì)于不同情況噪聲的舌診圖像去噪能力的不同,從而減少外部條件對(duì)舌診圖像產(chǎn)生影響,并將影響盡量降低,以此來(lái)輔助到醫(yī)師的舌診功能,助力中醫(yī)事業(yè)的發(fā)展。