祁崢東 ,閻 妍,楊正穎,常合軒,殷海金,姜欣怡,陳 果,陳麒光
(1.南京曉莊學院 信息工程學院、人工智能學院,江蘇 南京 211171;2.南京曉莊學院 電子工程學院,江蘇 南京 211171)
“圖像處理和機器視覺”課程廣泛開設于計算機科學與技術、數據科學與大數據技術等相關專業,該課程內容抽象、理論嚴謹、矩陣公式繁多、邏輯性強。同時該課要求可視化程度高,屬于一門實踐性很強的課程,學生接觸初期難以調動學習積極性[1]。教師在授課過程中不但需要講解算法基本知識,還需帶領學生展開數字圖像處理實驗,此設計性實驗對學生實踐能力和創新能力的培養有著不可替代的作用。因此,設計開發一套圖像處理教學輔助系統有著極為重要的現實意義。
近年來,將Matlab軟件應用于數字圖像處理教學實驗的范例不斷增多[2-6]。此類實驗課程要求學生在前期對模式識別、圖像處理以及計算機視覺相關領域有一定的知識儲備,后期掌握和運用數字圖像的修復、增強、去噪等處理技術。為加強理論與實際結合,提高教學質量,本文基于Matlab環境下的圖形用戶接口(GUI)建立了圖像處理與計算機視覺一體化輔助教學平臺用于課堂實驗,進一步指導學生對演示的現象進行觀察和分析。另外該系統特別強調了模塊化工程,將每塊實現圖像處理的代碼分別進行function函數定義,有利于老師在授課過程中對圖像處理技術相關算法進行講解,也有利于學生的理解和自主學習。
基于Matlab GUI的圖像處理教學輔助演示系統利用Matlab提供的GUI平臺來設計人機交互的圖形用戶界面,集成了“圖像處理和機器視覺”課程理論教學和實驗教學的三個主要模塊:圖像修復、圖像增強、圖像去噪。圖像處理所用的算法拆分出各個子function函數(圖1),利用中英文標簽特定按鈕在程序運行過程中自動調用特定的函數,實現獨立的圖像處理功能。
圖1 各子function函數
系統的開發環境選定為Matlab的2018a 64位版本,由GUI構建的操作界免對應兩個子功能文件,其一是包含回調函數的Main.m文件,另一個是包含圖窗文件的Main.fig文件,Main.m文件用來編程,進行相應功能的修改,Main.fig文件的設定則是顯示GUI功能按鈕,進行界面布局的修改和按鈕的增減。
圖2 輔助教學演示系統設計框架
設計GUI用戶界面一般分為以下四個步驟:
① 明確輔助教學系統需要實現的主要功能以及通過哪些子function函數可實現這些功能;
② 勾勒出用戶界面草圖,避免一些潛在的缺點,并確立最終方案;
③ 利用Matlab GUI完成操作界面設計;
④ 在GUI界面中創建控件,實現圖像處理時子function函數的調用;
輔助教學系統的總體設計框架如圖2所示。
系統包括圖像修復、圖像增強、圖像濾波三部分內容,主界面如圖3所示。
圖3 主界面
該系統包含三個方面的圖像處理功能,每一塊功能可由GUI界面上1—3個按鈕實現,可以通過對控件的刪改或function子函數的修改對圖像處理功能進行精簡或擴充。學生通過點擊圖1中Main.m打開主界面的功能集成區,點擊對應處理按鈕即可實現相應的圖像處理功能。
圖像修復技術即指通過某些技術重建圖像中損壞或丟失的部分。例如在敦煌壁畫修復過程中,這項工作常由有一定歷史知識積累和考古經驗的藝術品修復師來完成。數字圖像技術領域中,圖像修復則涵蓋圖像插值技術范疇,指利用復雜的人工智能、機器學習算法來替換已缺失的圖像內容,主要替換圖像中的指定內容。
本輔助教學平臺中圖像修復功能由集成的Criminisi算法實現。該算法由Criminisi等人[7]于本世紀初提出,此算法是現階段最為經典的紋理圖像修復算法,知網中相關文獻多達444篇,教學平臺中集成此類經典算法對學生理解圖像修復技術具有積極引導意義。
該算法尋找匹配樣本區域過程中借鑒了紋理生成這一思路,并定義邊緣附近(此處蘊含較多結構信息)的修復塊具有較高的修復優先級,此操作借鑒了結構修復中的擴散方式,這一流程旨在對結構信息保留的同時對紋理信息進行修復。
經典Criminisi算法包含下述三個步驟:
(1) 確定修復塊的優先級。在確定優先權高低時,考慮兩個因素:①待修復部分是否包含與其周圍閉合成一個連續線性結構的信息。②待修復部分內像素的置信度高低。
(2) 利用目標塊信息尋找匹配塊進行填充。當確定待修復部分邊界上所有匹配塊的優先級高低后利用最佳匹配塊進行填充。
(3) 更新置信度。目標部分修復工作完成后,原修復部分中的點變為邊界點或已知點,原修復部分中的邊界點變為已知點,此時重新獲得邊界點的優先權和各已知點的置信度。
以佛教壁畫為修復對象,結果如圖4。function函數部分如下:
圖4 圖像修復效果
function Xiufu=Criminisi(zx,zy,img,Figure,Region_source) %zx,zy為圖像的大小
Figure=rgb2gray(Figure);aa=size(Figure,1);bb=size(Figure,2);%得到待修復塊的實際大小
sx=zx-aa+1;sy=zy-bb+1;%確定搜索范圍的最大值
min=1.0000e+10;p=0;%賦初值
for i=1:sx %計算找到的匹配塊與待修復塊在已知像素點處的距離
for j=1:sy
mpatch=img(i:i+aa-1,j:j+bb-1,:);%得到圖像中和待修復塊同樣大小的塊
for x=i:i+aa-1;
for y=j:j+bb-1;
if Region_source(i,j)==0
p=1;
end
end
end
if any(p(:))%說明有破損點,不作為待修復塊的最佳匹配塊
continue;
end
E=0;r=mpatch(:,:,1);g=mpatch(:,:,2);b=mpatch(:,:,3);
R=Figure(:,:,1);G=Figure(:,:,2);B=Figure(:,:,3);
rc=r-R;gc=g-G;bc=b-B;E=rc.^2+gc.^2+bc.^2;
if E min=E;%取使得誤差最小的塊,并記住它們在圖像中的起始位置 hk=i;lk=j; end end end rows=hk:hk+aa-1;cols=lk:lk+bb-1;%誤差最小的塊就是最佳匹配塊 Xiufu=form_patch(rows,cols,zx); 圖像增強功能在本實驗平臺中指通過某種圖像處理算法對某些待加強的圖像特征,如對比度、局部細節、顏色等進行處理,以提升圖片的視覺效果,從而適用于在特定場合展示。 2.2.1 直方圖均衡化技術 若一張圖片具有n個離散灰度級,則灰度值變化范圍應固定在[0,2n-1]之間。假設每一個灰度級以等概率狀態出現,則此圖片灰度級豐富且覆蓋范圍較大,可展示出多變的灰度色調和較高的對比度。直方圖均衡化技術的核心思想是對待處理圖像的灰度級設計某種映射的規則,并用相應的映射函數來表示,從而提升待處理圖片灰度級范圍,即使得圖片灰度級的概率密度變換為均勻分布。 圖5 全局直方圖均衡化結果 在全局直方圖均衡化部分,Matlab自帶函數histeq可以實現這一功能。調用格式為:Out=histeq(Img,n)。其中Img表示待變換的灰度圖片,Out表示具有n個離散灰度級的圖像。近似的像素數被映射到Out中的n個離散灰度級中的每一個,使得Out的直方圖近似平坦,若Img中的離散層數量遠高于n,則Out的直方圖更為平坦。 以圖4修復后的佛教壁畫為全局直方圖均衡化對象,結果如圖5。function函數部分如下: function In=Global_Histogram_Equalization(Img, flag) if nargin<2 flag=1; end R=Img(:,:,1);G=Img(:,:,2);B=Img(:,:,3); M=histeq(R);N=histeq(G);L=histeq(B);In=cat(3, M, N, L); if flag figure; subplot(1, 2, 1); imshow(Img); title('原始圖片', 'FontWeight', 'Bold'); subplot(1, 2, 2); imshow(In); title('算法效果', 'FontWeight', 'Bold'); end end 圖6 局部直方圖均衡化結果 在局部直方圖均衡化部分,函數adapthisteq可以實現這一功能。調用格式為:Out=adapthisteq(Img,param1,val1,param2,val2)。其中Img為輸入圖像,Out為輸出圖像,parm/val為可選標量或字符串。此Matlab 2018a自帶函數表示適應直方圖均衡化對比度限制器,通過轉換強度圖像中的值來提升圖像的對比度。 以圖4修復后的佛教壁畫為局部直方圖均衡化對象,結果如圖6。function函數部分如下: function In=Local_Histogram_Equalization(Img, flag) %對灰度圖像,進行局部直方圖均衡化 % I——圖像矩陣;g——結果圖像 %調用庫函數adapthisteq,執行局部均衡化增強 if nargin<2 flag=1; end g1=adapthisteq(Img(:,:, 1),'clipLimit',0.02,'Distribution','rayleigh'); g2=adapthisteq(Img(:,:, 2),'clipLimit',0.02,'Distribution','rayleigh'); g3=adapthisteq(Img(:,:, 3),'clipLimit',0.02,'Distribution','rayleigh'); %集成局部直方圖均衡化的分量得到結果圖像 In=cat(3, g1, g2, g3); %結果顯示 if flag figure; subplot(1, 2, 1); imshow(Img); title('原始圖片', 'FontWeight', 'Bold'); subplot(1, 2, 2); imshow(In); title('處理后的圖像', 'FontWeight', 'Bold'); end 2.2.2 Retinex算法 依據Retinex色彩[8]原理,長、中、短三個波段光線的反射情況共同決定了物體顯示的顏色,物體的反射能力與光源并不存在依賴關系,屬于物體本身固有的特性。算法通過計算各自波段條件下的像素間的明暗關系,利用長、中、短三個波段內的相對明暗關系從而獲得該像素的顏色。此算法的優點包括: 圖7 經Retinex圖像增強算法處理后的效果 ① 圖片中各個像素的相對明暗關系受到光源的影響較小,因此當處理對比度很小的圖片(如總體偏暗或偏亮的照片)時,該算法使物體的色彩不受光照非均勻性的影響,此提升圖像的對比度的方式,可大幅改善圖像質量。 ② 對于光源偏色導致常見的失真現象,利用該算法可得到理想的糾正效果。 Retinex算法運行主要包括以下三個步驟: ① 準備數據階段。假設輸入數字圖像為彩色制式,先將其劃分為三個波段(分別是R,G,B),再將每個像素的值做浮點數化處理。 ② 獲得各自波段內各像素之間的相對明暗關系。 ③ 數據顯示部分。將上步驟中確定的色彩值變化為RGB值。 以圖4中修復后的佛教壁畫做為Retinex圖像增強算法的實驗對象,算法處理后的效果如圖7,function函數部分如下: function Out=Retinex(Img, flag) % 輸入參數:f——圖像矩陣;flag——顯示標記;輸出參數:In——結果圖像 if nargin<2 flag=1; end fr=Img(:,:, 1);fg=Img(:,:, 2);fb=Img(:,:, 3); %數據類型歸一化 mr=mat2gray(im2double(fr));mg=mat2gray(im2double(fg));mb=mat2gray(im2double(fb)); alpha=1300;%定義alpha參數 n=138;%定義模板大小 n1=floor((n+1)/2);%計算中心 for i=1:n for j=1:n %高斯函數 b(i,j)=exp(-((i-n1)^2+(j-n1)^2)/(4*alpha))/(pi*alpha); end end %卷積濾波 nr1=imfilter(mr,b,'conv', 'replicate');ng1=imfilter(mg,b,'conv', 'replicate'); nb1=imfilter(mb,b,'conv', 'replicate');ur1=log(nr1);ug1=log(ng1);ub1=log(nb1); tr1=log(mr);tg1=log(mg);tb1=log(mb);yr1=(tr1-ur1)/3;yg1=(tg1-ug1)/3;yb1=(tb1-ub1)/3;beta=67;%定義beta參數 x=43;%定義模板大小 x1=floor((n+1)/2);%計算中心 for i=1:n for j=1:n %高斯函數 a(i,j)=exp(-((i-n1)^2+(j-n1)^2)/(4*beta))/(6*pi*beta); end end %卷積濾波 nr2=imfilter(mr,a,'conv', 'replicate');ng2=imfilter(mg,a,'conv', 'replicate'); nb2=imfilter(mb,a,'conv', 'replicate');ur2=log(nr2);ug2=log(ng2);ub2=log(nb2); tr2=log(mr);tg2=log(mg);tb2=log(mb);yr2=(tr2-ur2)/3;yg2=(tg2-ug2)/3;yb2=(tb2-ub2)/3; eta=15000;%定義eta參數 l=600;%定義模板大小 l1=floor((n+1)/2);%計算中心 for i=1:n for j=1:n %高斯函數 e(i,j)=exp(-((i-n1)^2+(j-n1)^2)/(4*eta))/(4*pi*eta); end end %卷積濾波 nr3=imfilter(mr,e,'conv', 'replicate');ng3=imfilter(mg,e,'conv', 'replicate'); nb3=imfilter(mb,e,'conv', 'replicate');ur3=log(nr3);ug3=log(ng3);ub3=log(nb3); tr3=log(mr);tg3=log(mg);tb3=log(mb);yr3=(tr3-ur3)/3;yg3=(tg3-ug3)/3;yb3=(tb3-ub3)/3;dr=yr1+yr2+yr3;dg=yg1+yg2+yg3;db=yb1+yb2+yb3;cr=im2uint8(dr);cg=im2uint8(dg);cb=im2uint8(db); Out=cat(3, cr, cg, cb);% 集成處理后的分量得到結果圖像 if flag figure; subplot(1, 2, 1); imshow(Img); title('原始圖片', 'FontWeight', 'Bold');%結果顯示 subplot(1, 2, 2); imshow(Out); title('算法效果', 'FontWeight', 'Bold'); end 圖像濾波技術旨在盡可能保留圖像的原始視覺特征信息并對圖像的噪聲進行剝離或抑制。該功能模塊可疊加的噪聲分為椒鹽噪聲和高斯噪聲。 ① 椒鹽噪聲。屬于圖像處理中常見到的噪聲,也稱為脈沖噪聲,視覺特征展示為一種隨機出現的黑點或白點,在數字圖片的黑暗部分出現白色像素以及在明亮的區域有黑色像素出現。椒鹽噪聲的產生多為影像信息受到無法預測的強干擾所致、如高溫和不良照明等。此噪聲多出現在灰度圖片中。本系統中,將原有灰度圖中的像素值疊加上噪聲分量,即可產生對應的圖片。 ② 高斯噪聲。此噪聲密度函數服從高斯分布(正態分布),是目前應用最為廣泛的一種噪聲模型,具有在空間和頻域上易處理的特點。 生成椒鹽噪聲與高斯噪聲使用Matlab自帶的imnoise( )函數。 本系統使用均值濾波(線性濾波算法)、中值濾波(非線性數字濾波器)和維納濾波(最優的線性濾波器)三種濾波方式實現濾除噪聲的功能。三種濾波器特點如下: ① 均值濾波技術。使用模板(如中心像素點和周圍8個像素點組成模板)均值代替原位置中的各個像素值。該濾波技術可使用Matlab函數imfilter( )以實現。 ② 中值濾波。與上步驟相似,同樣是模板概念,計算模板除中心點外的其余像素點的中值,假設中心點是孤立的噪聲點,周圍像素點的中值將取代該像素點的值。該濾波技術可使用Matlab函數medfilt2( )以實現。 ③ 維納濾波器的輸出與期望輸出之間的均方誤差為最小,可以有效濾除平穩噪聲。該濾波技術可使用Matlab函數wiener2 ( )以實現。 在椒鹽和高斯噪聲條件下,以圖4中修復后的佛教壁畫做為算法的實驗對象,上述三種濾波方式的優化結果分別如圖8、9所示。通過將多圖融合到一張圖上的表現形式,學生可以直觀的對比到三種技術對噪聲的濾除效果。 圖8 椒鹽噪聲條件下,中值等三種濾波方式處理結果 圖9 高斯噪聲條件下,中值等三種濾波方式處理結果 基于Matlab GUI的圖像處理教學輔助演示系統具有以下特點: (1) 系統內容豐富。該輔助教學平臺涵蓋了圖像處理和機器視覺課程的大部分重點內容,包含了圖像修復、增強和去噪功能。三類功能是目前圖像處理技術的重要組成部分,有著現實的研究與應用價值。 (2) 系統界面簡潔友好、操作簡單。通過界面按鈕可實現圖像處理功能,無需對.m文件或在命令行窗口進行編譯。同時在同一界面顯示原始圖片和算法處理后的圖片,學生可直觀對比算法優化后的結果。 (3) 具有良好的可視性。系統將每個模塊實現圖像處理的代碼分別進行function函數定義,有利于老師授課期間清晰地講解,提升教學效果,也有助于學生對圖像處理知識的理解。 (4) 系統靈活性強、模塊化程度高。學生可以根據教學進度,以變動Main.m和Main.fig的方式來優化系統界面,或對現有6個子功能文件進行改寫、精簡或擴充以增加預期的圖像處理算法,模塊化設計有利于提升學生自主學習的積極性,加深對圖像處理和機器視覺課程內容的認知。 針對現有的圖像處理和機器視覺實驗系統存在的程序結構復雜、命令行編程在教學直觀性方面表現力弱、學生在課程學習中無法理解機器視覺相關算法的基本原理、不適合在課程學習的初級階段推廣等缺點,本文提出基于Matlab GUI的圖像處理和機器視覺輔助教學平臺,此系統實現了理論教學與實驗教學的融合,具有內容豐富、界面簡潔友好、操作簡單、良好的可視性、靈活性強、模塊化程度高等優點。在教學過程中,此系統有利于老師的教學講解和學生的理解與自主學習,進而提升課堂的教學效率和學習效率,也有助于培養計算機、大數據相關專業學生的創新能力與實踐能力。2.2 圖像增強
2.3 圖像濾波
3 系統特征分析
4 結 語