基於Matlab圖像處理的公路裂縫檢測實現
一、簡介
1 案例背景
隨著國傢對公路建設的大力投入,我國的公路通車總裡程己經位居世界前列,這樣進一步促進瞭我國經濟建設的發展。隨著公路的大量投運,公路日常養護和管理已經成為制約公路運營水平提高的瓶頸,特別是路面狀態采集、檢測維護等工作更是對傳統的公路運維模式提出瞭挑戰。路面裂縫是公路日常養護管理中最常見的路面損壞,也是影響公路狀態評估和進行必要的公路維修的重要因素!。一般而言,如果路面裂縫能夠在被惡化成坑槽之前得到及時修補,則可以大大節約公路的養護成本。傳統的公路裂縫檢測主要是人工檢測,需要配置一定規模的人力、設備等資源來進行定期巡檢。但是,面對日益增長的公路建設需求,人工檢測具有運營效率低、主觀性影響大、危險性較高等不足,已無法滿足公路破損快速檢測的要求。
隨著計算機硬件設備和數字圖像處理技術的發展,基於視覺的目標定位及檢測技術也取得瞭不斷的進步,由於其具有定位準確、檢測快速、自動化操作、易於安裝部署等特點,已經廣泛應用於工業自動化檢測過程,特別是在目標表面質量檢測、目標物測量等領域的應用。因此,基於數字圖像的路面裂縫檢測技術可以提供一個安全、高效、成本低廉的道路狀態監控服務,已有多種圖像處理方法應用於路面裂縫檢測並在一定程度上取得瞭實際應用。
2 理論基礎
路面裂縫檢測從視覺上來看是典型的線狀目標檢測,因此路面裂縫圖像的增強與定位屬於線狀目標檢測的研究領域,路面裂縫與一般線狀目標相比,具有其自身的特點:目標寬度相對較小、圖像對比度較低、具有自然間斷、具有分叉和雜點等,並且路面裂縫隻是在視覺總體上呈現出線狀特征.傳統的裂縫自動檢測算法,如基於閾值分割、邊緣檢測、小波變換等算法,往往都假設路面裂縫在整幅圖像中具有較高的對比度和較好的連續性,但這種假設在實際的工程項目中往往不成立。由於受拍攝天氣、路面損耗、裂縫退化等因素的影響,有一定比例的裂縫相對於路面背景具有極低的對比度,這也會引起傳統裂縫檢測算法的失效,因此需要在裂縫圖像處理前加入一定的預處理步驟。圖像預處理一般是應用於圖像識別、圖像表示等領域的一種前期處理。在圖像的采集和傳輸過程中,往往會因為某些原因導致圖像質量降低。
例如,從視覺主觀上觀察圖像中的物體,可能會發覺其輪廓位置過於鮮艷而顯得突兀:從被檢測目標物的大小和形狀來看,圖像特征比較模糊、難以定位;從圖像對比度的角度來看,可能會受到某些噪聲的影響;從圖像整體來看,可能會發生某種失真、變形等,因此,待處理圖像在視覺直觀性和處理可行性等方面可能存在諸多幹擾,我們不妨將其統稱為圖像質量問題。圖像預處理正是用於圖像質量的改善處理,通過一定的計算步驟進行適當的變換進面突出圖像中某些感興趣的信息,消除或降低幹擾信息,如圖像對比度增強、圖像去噪或邊緣提取等處理印,一般情況下,由於裂縫圖像的采集需要涉及室外作業,所得圖片難免會存在一定的噪聲幹擾、畸變等各種問題,直接進行裂縫目標的檢測和提取往往會遇到困難。因此,本案例首先將裂縫圖像進行預處理,改善圖像質量,進而提高實驗的優化效果。圖像預處理的基本方法有圖像灰度變換、頻域變換、直方圖變換、圖像去噪、圖像銳化、圖像色彩變換等。本案例將選擇其中的部分方法來進行裂縫圖像的預處理操作。
2.1 圖像灰度化
自然界中絕大部分的可見光譜均能通過紅®、綠(G)、藍(B)三色光按不同比例和強度進行混合而得到, 我們將其稱為RGB色彩模式。該模式以RGB模型為基礎, 對圖像的每個像素值的RGB分量均分配一個Uint 8類型(0~255) 的強度值。例如, 純紅色的R值為255, G值為0, B值為0; 品紅色的R值為255, G值為0, B值為255。RGB圖像的紅、綠、藍分量各占8位,因此是24位圖像,並且不同亮度的基色混合後,會產生出256x256x 256-16777216種顏色。RGB模型圖形化表示如圖所示。
假設F(i, j) 為RGB模型中的某像素, 若其3種基色的亮度值相等, 則會產生灰度顏色,將該R=G=B的值稱為灰度值(或者稱為強度值、亮度值)。因此,灰度圖像就是包含多個量化灰度級的圖像。假設該灰度級用Uint 8類型數值表示, 則圖像的灰度級就是256(即2°=256)。本案例所選擇的灰度圖像灰度級均為256,其像素灰度值為0~255的某個值,當亮度值都是255時產生純白色,當亮度值都是0時產生純黑色,並且亮度從0到255呈現逐漸增加的趨勢。RGB圖像包含瞭由紅、綠、藍三種分量組成的大量的色彩信息, 灰度圖像隻有亮度信息而沒有色彩信息。針對路面裂縫圖像的檢測要求,一般需要去除不必要的色彩信息, 將所采集到的RGB圖像轉換為灰度圖像。RGB圖像的灰度化方法有以下幾種。
(1)分量值
選取像素F(i.j)的R、G、B分量中的某個值作為該像素的灰度值,即
式中,Fg(i,j)為轉換後的灰度圖像在(i.j)處的灰度值。
(2)最大值
選取像素F(i,j)的R、G、B分量中的最大值作為該像素的灰度值,即
(3)平均值
選取像素F(i,j)的R、G、B分量的亮度均值作為該像素的灰度值,即
(4)加權平均值
選取像素F(i,j)的R、G、B分量的亮度加權均值作為該像素的灰度值,權值的選取一般是根據分量的重要性等指標,將3個分量以加權平均的方式進行計算得到灰度值。人眼在視覺主觀上一般對綠色分量敏感度較高, 對藍色分量敏感度較低, 因此對RGB三分量進行加權平均能得到較合理的灰度圖像,常用的計算公式如下:
F.(i.j)=0.299R(i,j)+0.587G(i,j)+0.114*B(i,j)
采用加權平均計算灰度圖像的方式對裂縫圖像進行灰度化,所得結果如圖所示。
2.2 圖像濾波
裂縫圖像在采集或傳輸的過程中往往會受到成像設備與傳輸介質等因素的幹擾而產生噪聲,因此待處理的裂縫圖像可能會存在邊緣模糊、黑白雜點等問題,這在一定程度上會對裂縫目標的檢測和識別產生影響,幹擾實驗結果的判斷,因此需要對裂縫圖像進行濾波去噪。本節將從均值濾波和中值濾波兩方面來進行圖像去噪的處理。均值濾波也稱為鄰域平均濾波,該方法假設待處理圖像是由許多灰度值為常量的小區域組成的,並且相鄰區域間存在較高的空間相關性,而噪聲則顯得相對獨立。因此,通過將單個像素及其指定鄰域內的所有像素按某種規則計算平均灰度值,再作為新圖像中的對應像素值,可達到濾波去噪的目的,這一過程被稱為均值濾波。鄰域平均法屬於非加權鄰域平均范疇,是最常用的均值濾波操作。
圖像邊緣一般集中瞭圖像的細節和高頻信息,如果通過鄰域平均法進行去噪,則往往會引起圖像邊緣的模糊,這也會對裂縫目標的檢測帶來不利影響。中值濾波是常用的非線性濾波方法,其主要思想是對像素鄰域向量化取中值來進行濾波,具有運算簡單、高效,能有效去除脈沖噪聲的特點,在去噪的同時它也可以有效地保護圖像的邊緣細節信息。因此,本案例將采用中值濾波的方法來對裂縫圖像進行去噪處理,其處理步驟如下。
(1)定位
在圖像中移動模板,將模板中心與圖像中的某個像素重合。
(2)計算
選擇模板對應於圖像的各像素灰度值,進行向量化,並將其進行排序。
(3)賦值
選擇序列的中間值,作為輸出賦予模板中心對應的像素。
如圖2所示,根據中值濾波器形狀和維數的不同,其模板有線形、十字形、方形、菱形等,不同形狀的窗口也會產生不同的濾波效果。在對裂縫圖像進行中值濾波處理時,其關鍵在於選擇合適的模板形狀和模板大小。
2.3 圖像增強
路面裂縫圖像的采集一般在室外進行,容易受到大氣、光照、機械振動等因素的影響,采集到的裂縫圖像可能存在整體偏暗或偏亮等問題,進而產生對比度較低的圖像。此類圖像的特點是灰度分佈范圍較小,集中在少量的灰度區間內,這也給後續的裂縫檢測和識別帶來瞭不利影響,因此需要對此類圖像進行增強處理來提高對比度。直方圖作為圖像灰度級分佈的統計表,能在一定程度上反映圖像的對比度詳情。圖像的灰度直方圖表示該圖像所屬灰度類型中不同灰度級像素出現的相對頻率,並且直方圖的橫坐標表示灰度,縱坐標表示灰度出現的次數或概率。直方圖均衡化利用灰度直方圖進行圖像對比度的調整,以達到增強圖像視覺效果的目標。直方圖均衡化的基本思想是通過某種變換,將原始圖像的灰度直方圖從集中於某個較小的灰度區間變成在更大灰度區間內均勻分佈的形式,得到灰度級差式分佈,從而達到增強圖像整體對比度的目標。裂縫圖像區域通常屬於顏色較暗的灰度區間,背景區域則屬於相對較亮的灰度區間。但在采集裂縫圖像的過程中,往往會由於天氣幹擾、曝光不足等原因而造成圖像整體偏暗,使裂縫區域與背景區域亮度特征相近而不易辨別,如圖所示。從原始裂縫圖像的灰度直方圖可以看出,其灰度值分佈主要集中在0100的低層次灰度區間。因此,為瞭提高裂縫與背景的對比度,需要將原圖像的灰度值范圍進行擴大,形成較為明顯的灰度級差,進而增加裂縫圖像的對比度。經過灰度直方圖均衡化處理,裂縫圖像的灰度范圍擴到瞭0255,得到對比度增強後的裂縫圖像,更加突出瞭裂縫與背景的差異程度。
2.4 圖像二值化
灰度圖像二值化是指通過約定一個灰度閾值來分割目標與背景,在閥值之內的像素於目標即記為1,其他則屬於背景即記為0。在裂縫目標檢測與識別的過程中,可以采用裂縫邊緣、面積等特征來進行判別,也可以采用裂縫目標與周圍背景的灰度差異值作為個判別依據,這就要求引入閾值來進行圖像二值化處理。假設一幅灰度裂縫圖像用f(x,y)表示,其中,(x,y)表示圖像中像素的位置坐標,T為閾值,則閾值分割後的二值圖像b(x,y)滿足:
裂縫目標或背景區域的像素灰度通常是高度相關的,但裂縫目標與背景區域之間的灰度值則通常存在較大差異,一般包含明顯的邊緣等特征。因此,為瞭從更大程度上分割裂縫目標與背景,則需要對其進行灰度閾值分割選取合適的閾值。閾值計算方法根據其計算過程可以分為兩種:全局閾值和基本自適應閾值,如下所述。
(1)全局閾值是最常見的閾值計算方法,它一般以圖像的直方圖或灰度空間分佈為基礎來確定一個閾值,進而實現灰度圖像的二值化。特別是當圖像的灰度直方圖分佈呈雙峰時,全局閾值法可以明顯地將目標和背景分量,得到較為理想的圖像分割效果。但裂縫圖像一般具有光照不均勻、噪聲幹擾等特點,其灰度直方圖往往不會呈雙峰分佈,因此全局閾值分割方法效果較差。
(2)基本自適應閥值是一種比較基礎的圖像自適應分割方法,它一般以圖像像素自身及其鄰域灰度變化的特征為基礎進行閾值分割,進而實現灰度圖像的二值化。該方法充分考慮瞭每個像素鄰域的特征,所以一般能更好地突出目標和背景的邊界。
裂縫圖像的背景在多數情況下比較固定,如路面、橋面、墻體等。但由於圖像采集一般在室外進行,會受到拍攝條件、路面雜物等因素的影響,所以圖像容易出現退化或噪聲幹擾。本案例通過分析裂縫圖像目標和背景的特點,采用自定義和迭代法優化相結合的方法。
3 程序實現
根據裂縫圖像的特點,在對其進行目標檢測和識別之前,需要進行圖像預處理,主要包括:直方圖均衡化增強、中值濾波去噪、對比度增強、二值化處理、二值圖像濾波等步驟。其中,在二值化過程中對閾值的確定選擇自定義閾值法與迭代自適應法相結合的方式來計算;二值圖像濾波主要是連通區域的面積濾波,通過去除小面積的雜點噪聲來進行濾波去噪。裂縫圖像經過預處理可以得到突出裂縫目標的二值圖像,然後可以根據形態學區域特征來獲取裂縫目標並進行檢測識別。對於裂縫的形狀識別可以通過計算圖像中裂縫目標的外接矩形的長寬比來確定。
二、部分源代碼
clc; close all; clear all; %% 讀取圖片 I=imread('1.jpg'); %% 判斷圖像格式及調整圖像尺寸、直方圖均衡化 if(ndims(I)==3)%ndims是求數組維數的函數 img=rgb2gray(I); img=double(img);%轉換為雙精度 else img=double(I);%轉換為雙精度 end if(max(size(img))>1024) scale=1/8; %圖像調整為原圖尺寸的1/8 I1 = imresize(img, scale);%縮放處理 else I1=img; end [m,n]=size(I1); f_size=max(m,n); %% 去噪、銳化 [Slog f2]=frequence_get(I1,f_size); %% 陷波濾波 去除周期性噪聲 % % 用陷波濾波模板修改原圖傅裡葉頻譜,濾除高頻周期噪聲 % % 構造陷波濾波器模板 Mask=Muban(Slog,f_size); vex=find(Mask==0); I_spec=I1; I_spec=im2uint8(mat2gray(I_spec));%矩陣歸一化,把圖像數據類型轉換為無符號的8位整形 I_spec(f_size,f_size)=0; Spectrum=fft2(uint8(I_spec));%2維離散傅裡葉變換 Spec=abs(Spectrum); %幅度譜 phi=angle(Spectrum); %相位譜 Spec=fftshift(Spec); Spec1=Spec; Spec1(vex)=0; Spec2=ifftshift(Spec1); CJ=Spec2.*exp(i*phi); %重建傅裡葉頻譜 Re_fft2=ifft2(CJ); %反傅裡葉變換,還原圖像 Restore=uint8(real(Re_fft2)); %% 對還原圖像維納濾波 % % 維納濾波 K=wiener2(Restore(1:m,1:n),[3 3]);%維納濾波(wiener filtering) 一種基於最小均方誤差準則、對平穩過程的最優估計器。這種濾波器的輸出與期望輸出之間的均方誤差為最小,因此,它是一個最佳濾波系統。它可用於提取被平穩噪聲所污染的信號。 [result,threshold1]=edge(K,'sobel',0.07);% 若原圖沒有進行均衡化,閾值用0.07,sobel算子邊緣檢測裂縫 [BW,thresh1]=bwfilter(K,result);%二值化濾波器去幹擾 figure, subplot(151);imshow(I1,[]);title('原始圖像'); subplot(152);imshow(Restore(1:m,1:n),[]);title('反傅裡葉變換圖像'); subplot(153);imshow(K,[]);title('維納濾波降噪'); subplot(154);imshow(result,[]);title('裂紋檢測'); subplot(155);imshow(BW);title('二值化濾波器去幹擾'); % % 形態學操作 Se0=strel('line',3,0);%創建一個相對於鄰域中心對稱的線性結構元素 Se90=strel('line',3,90); bw_dialte=imdilate(BW,[Se0 Se90]);%膨脹 bw_fill=imfill(bw_dialte,'holes');%填充 bw1=bwmorph(bw_fill,'thin',Inf);%細化 bw2=bwmorph(bw1,'spur',3); %去毛刺 bw3=bwareaopen(bw2,5);%移除小目標 figure, subplot(151);imshow(bw_dialte);title('膨脹'); subplot(152);imshow(bw_fill);title('填充'); subplot(153);imshow(bw1);title('細化'); subplot(154);imshow(bw2);title('去毛刺'); subplot(155);imshow(bw3);title('移除小目標');
三、運行結果
以上就是基於Matlab圖像處理的公路裂縫檢測實現的詳細內容,更多關於Matlab公路裂縫檢測的資料請關註WalkonNet其它相關文章!