【原創(chuàng)】基于數(shù)字圖像處理的車牌識別系統(tǒng)設(shè)計與實現(xiàn)_第1頁
【原創(chuàng)】基于數(shù)字圖像處理的車牌識別系統(tǒng)設(shè)計與實現(xiàn)_第2頁
【原創(chuàng)】基于數(shù)字圖像處理的車牌識別系統(tǒng)設(shè)計與實現(xiàn)_第3頁
【原創(chuàng)】基于數(shù)字圖像處理的車牌識別系統(tǒng)設(shè)計與實現(xiàn)_第4頁
【原創(chuàng)】基于數(shù)字圖像處理的車牌識別系統(tǒng)設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

PAGEPAGE62基于數(shù)字圖像處理的車牌識別系統(tǒng)設(shè)計與實現(xiàn)TOC\o"1-3"\h\u目錄17131摘要 1165391.設(shè)計原理 2171842.詳細設(shè)計步驟 3110172.1提出總體設(shè)計方案 3159592.2預(yù)處理及邊緣提取 458892.2.1圖象的采集與轉(zhuǎn)換 4149022.2.2邊緣提取 5230862.3牌照的定位和分割 9271172.3.1牌照區(qū)域的定位 916442.3.2牌照區(qū)域的分割 10157902.3.3車牌進一步處理 11250522.4字符的分割與歸一化 1217632.4.1字符分割 13217082.4.2字符歸一化 1379422.5字符的識別 1391273.設(shè)計結(jié)果及分析 16118494.程序源代碼 19157464.1基于matlab的程序源代碼 19226414.2基于VC++的程序源代碼 31276545.結(jié)語 5724466.心得體會 58224767.參考文獻 59摘要汽車牌照自動識別系統(tǒng)是制約道路交通智能化的重要因素,包括車牌定位、字符分割和字符識別三個主要部分。本文首先確定車輛牌照在原始圖像中的水平位置和垂直位置,從而定位車輛牌照,然后采用局部投影進行字符分割。在字符識別部分,提出了在無特征提取情況下基于支持向量機的車牌字符識別方法。實驗結(jié)果表明,本文提出的方法具有良好的識別性能。隨著公路逐漸普及,我國的公路交通事業(yè)發(fā)展迅速,所以人工管理方式已經(jīng)不能滿著實際的需要,微電子、通信和計算機技術(shù)在交通領(lǐng)域的應(yīng)用極大地提高了交通管理效率。汽車牌照的自動識別技術(shù)已經(jīng)得到了廣泛應(yīng)用。關(guān)鍵字:車牌識別系統(tǒng)、智能化交通、車牌定位、字符分割、字符識別Abstract

Vehiclelicenseplaterecognitionsystemistheintelligentroadtrafficconstraintsimportantfactors,includingthelicenseplatelocation,charactersegmentationandcharacterrecognitionofthreemainparts.Firstly,thevehiclelicenseintheoriginalimagetodeterminethehorizontalandverticalposition,therebypositioningthevehiclelicense,andcharactersegmentationusingalocalprojection.Inthecharacterrecognitionpartoftheproposedfeatureextractioninthecaseofnon-supportvectormachinebasedlicenseplaterecognitionmethod.Experimentalresultsshowthattheproposedmethodhasgoodrecognitionperformance.Withtheincreasingpopularityofroad,roadtransportinChinahasdevelopedrapidly,sotheartificialmanagementhasnotfullofactualneeds,microelectronics,communicationsandcomputertechnologyapplicationsinthetransportsectorhasgreatlyimprovedtheefficiencyoftrafficmanagement.Automaticlicenseplaterecognitiontechnologyhasbeenwidelyused.

Keywords:licenseplaterecognitionsystem,intelligenttransportation,licenseplatelocalization,charactersegmentation,characterrecognition1.設(shè)計原理由于車輛牌照是機動車唯一的管理標識符號,在交通管理中具有不可替代的作用,因此車輛牌照識別系統(tǒng)應(yīng)具有很高的識別正確率,對環(huán)境光照條件、拍攝位置和車輛行駛速度等因素的影響應(yīng)有較大的容閾,并且要求滿足實時性要求。圖1牌照識別系統(tǒng)原理圖該系統(tǒng)是計算機圖像處理與字符識別技術(shù)在智能化交通管理系統(tǒng)中的應(yīng)用,它主要由圖像的采集和預(yù)處理、牌照區(qū)域的定位和提取、牌照字符的分割和識別等幾個部分組成,如圖1所示。其基本工作過程如下:(1)當行駛的車輛經(jīng)過時,觸發(fā)埋設(shè)在固定位置的傳感器,系統(tǒng)被喚醒處于工作狀態(tài);一旦連接攝像頭光快門的光電傳感器被觸發(fā),設(shè)置在車輛前方、后方和側(cè)面的相機同時拍攝下車輛圖像;(2)由攝像機或CCD攝像頭拍攝的含有車輛牌照的圖像通視頻卡輸入計算機進行預(yù)處理,圖像預(yù)處理包括圖像轉(zhuǎn)換、圖像增強、濾波和水平較正等;(3)由檢索模塊進行牌照搜索與檢測,定位并分割出包含牌照字符號碼的矩形區(qū)域;(4)對牌照字符進行二值化并分割出單個字符,經(jīng)歸一化后輸入字符識別系統(tǒng)進行識別。2.詳細設(shè)計步驟2.1提出總體設(shè)計方案車輛牌照識別整個系統(tǒng)主要是由車牌定位和字符識別兩部分組成,其中車牌定位又可以分為圖像預(yù)處理及邊緣提取模塊和牌照的定位及分割模塊;字符識別可以分為字符分割與特征提取和單個字符識別兩個模塊。為了用于牌照的分割和牌照字符的識別,原始圖象應(yīng)具有適當?shù)牧炼?,較大的對比度和清晰可辯的牌照圖象。但由于該系統(tǒng)的攝像部分工作于開放的戶外環(huán)境,加之車輛牌照的整潔度、自然光照條件、拍攝時攝像機與牌照的矩離和角度以及車輛行駛速度等因素的影響,牌照圖象可能出現(xiàn)模糊、歪斜和缺損等嚴重缺陷,因此需要對原始圖象進行識別前的預(yù)處理。牌照的定位和分割是牌照識別系統(tǒng)的關(guān)鍵技術(shù)之一,其主要目的是在經(jīng)圖象預(yù)處理后的原始灰度圖象中確定牌照的具體位置,并將包含牌照字符的一塊子圖象從整個圖象中分割出來,供字符識別子系統(tǒng)識別之用,分割的準確與否直接關(guān)系到整個牌照字符識別系統(tǒng)的識別率。由于拍攝時的光照條件、牌照的整潔程度的影響,和攝像機的焦距調(diào)整、鏡頭的光學(xué)畸變所產(chǎn)生的噪聲都會不同程度地造成牌照字符的邊界模糊、細節(jié)不清、筆劃斷開或粗細不均,加上牌照上的污斑等缺陷,致使字符提取困難,進而影響字符識別的準確性。因此,需要對字符在識別之前再進行一次針對性的處理。車牌識別的最終目的就是對車牌上的文字進行識別。主要應(yīng)用的為模板匹配方法。因為系統(tǒng)運行的過程中,主要進行的都是圖像處理,在這個過程中要進行大量的數(shù)據(jù)處理,所以處理器和內(nèi)存要求比較高,CPU要求主頻在600HZ及以上,內(nèi)存在128MB及以上。系統(tǒng)可以運行于Windows98、Windows2000或者WindowsXP操作系統(tǒng)下,程序調(diào)試時使用matlab。2.2預(yù)處理及邊緣提取輸入車牌圖象輸入車牌圖象灰度校正平滑處理提取邊緣圖2預(yù)處理及邊緣提取流程圖2.2.1圖象的采集與轉(zhuǎn)換考慮到現(xiàn)有牌照的字符與背景的顏色搭配一般有藍底白字、黃底黑字、白底紅字、綠底白字和黑底白字等幾種,利用不同的色彩通道就可以將區(qū)域與背景明顯地區(qū)分出來,例如,對藍底白字這種最常見的牌照,采用藍色B通道時牌照區(qū)域為一亮的矩形,而牌照字符在區(qū)域中并不呈現(xiàn)。因為藍色(255,0,0)與白色(255,255,255)在B通道中并無區(qū)分,而在G、R通道或是灰度圖象中并無此便利。同理對白底黑字的牌照可用R通道,綠底白字的牌照可以用G通道就可以明顯呈現(xiàn)出牌照區(qū)域的位置,便于后續(xù)處理。原圖、灰度圖及其直方圖見圖2與圖3。對于將彩色圖象轉(zhuǎn)換成灰度圖象時,圖象灰度值可由下面的公式計算:G=0.110B+0.588G+0.302R(1)G=(2)圖3原圖圖4灰度圖2.2.2邊緣提取邊緣是指圖像局部亮度變化顯著的部分,是圖像風、紋理特征提取和形狀特征提取等圖像分析的重要基礎(chǔ)。所以在此我們要對圖像進行邊緣檢測。圖象增強處理對圖象牌照的可辯認度的改善和簡化后續(xù)的牌照字符定位和分割的難度都是很有必要的。增強圖象對比度度的方法有:灰度線性變換、圖象平滑處理等。(1)灰度校正由于牌照圖象在拍攝時受到種種條件的限制和干擾,圖象的灰度值往往與實際景物不完全匹配,這將直接影響到圖象的后續(xù)處理。如果造成這種影響的原因主要是由于被攝物體的遠近不同,使得圖象中央?yún)^(qū)域和邊緣區(qū)域的灰度失衡,或是由于攝像頭在掃描時各點的靈敏度有較大的差異而產(chǎn)生圖象灰度失真,或是由于曝光不足而使得圖像的灰度變化范圍很窄。這時就可以采用灰度校正的方法來處理,增強灰度的變化范圍、豐富灰度層次,以達到增強圖象的對比度和分辨率。我們發(fā)現(xiàn)車輛牌照圖象的灰度取值范圍大多局限在r=(50,200)之間,而且總體上灰度偏低,圖象較暗。根據(jù)圖象處理系統(tǒng)的條件,最好將灰度范圍展開到s=(0,255)之間,為此我們對灰度值作如下的變換:s=T(r)r=[rmin,,rmax]使得S∈[Smin,Smax],其中,T為線性變換,圖5灰度線性變換(3)若r(50,200)、s(0,255)則:(4)(2)平滑處理對于受噪聲干擾嚴重的圖象,由于噪聲點多在頻域中映射為高頻分量,因此可以在通過低4325i,j167823i,j14通濾波器來濾除噪聲,但實際中為了簡化算法也可以直接在空域中用求鄰域平均值的方法萊削弱噪聲的影響,這種方法稱為圖象平滑處理。例如,某一象素點的鄰域S有兩種表示方法:8鄰域和4鄰域分別對應(yīng)的鄰域平均值為(5)其中,M為鄰域中除中心象素點f(i,j)之外包括的其它象素總數(shù),對于4鄰域M=4,8鄰域M=8。然而,鄰域平均值的平滑處理會使得圖象灰度急劇變化的地方,尤其是物體邊緣區(qū)域和字符輪廓等部分產(chǎn)生模糊作用。為了克服這種平均化引起的圖象模糊現(xiàn)象,我們給中心點象素值與其鄰域平均值的差值設(shè)置一固定的閾值,只有大于該閾值的點才能替換為鄰域平均值,而差值不大于閾值時,仍保留原來的值,從而減少由于平均化引起的圖象模糊。圖像中車輛牌照是具有比較顯著特征的一塊圖象區(qū)域,這此特征表現(xiàn)在:近似水平的矩形區(qū)域;其中字符串都是按水平方向排列的;在整體圖象中的位置較為固定。正是由于牌照圖象的這些特點,再經(jīng)過適當?shù)膱D象變換,它在整幅中可以明顯地呈現(xiàn)出其邊緣。邊緣提取是較經(jīng)典的算法,此處邊緣的提取采用的是Roberts算子。圖6robert算子邊緣檢測由上圖可以歸納起來以下方面:原始圖像清晰度比較高,從而簡化了預(yù)處理,結(jié)合MATLAB實驗過程,得出不是每一種圖像處理之初都適合濾波和邊界增強。本次汽車車牌的識別,為了保存更多的有用信息。2.3牌照的定位和分割牌照的定位和分割是牌照識別系統(tǒng)的關(guān)鍵技術(shù)之一,其主要目的是在經(jīng)圖象預(yù)處理后的原始灰度圖象中確定牌照的具體位置,并將包含牌照字符的一塊子圖象從整個圖象中分割出來,供字符識別子系統(tǒng)識別之用,分割的準確與否直接關(guān)系到整個牌照字符識別系統(tǒng)的識別率。由于牌照圖象在原始圖象中是很有特征的一個子區(qū)域,確切說是水平度較高的橫向近似的長方形,它在原始圖象中的相對位置比較集中,而且其灰度值與周邊區(qū)域有明顯的不同,因而在其邊緣形成了灰度突變的邊界,這樣就便于通過邊緣檢測來對圖象進行分割。對圖像進行腐蝕對圖像進行腐蝕去除雜質(zhì)通過計算尋找X和Y方向車牌的區(qū)域完成車牌定位對分割出的車牌做進一步處理圖7牌照定位于分割流程圖2.3.1牌照區(qū)域的定位牌照圖象經(jīng)過了以上的處理后,牌照區(qū)域已經(jīng)十分明顯,而且其邊緣得到了勾勒和加強。此時可進一步確定牌照在整幅圖象中的準確位置。這里選用的是數(shù)學(xué)形態(tài)學(xué)的方法,其基本思想是用具有一定形態(tài)的機構(gòu)元素去量度和提取圖像中的對應(yīng)形狀以達到對圖像分析和識別的目的。數(shù)學(xué)形態(tài)學(xué)的應(yīng)用可以簡化圖像數(shù)據(jù),保持它們基本的形態(tài)特征,并除去不相干的結(jié)構(gòu)。在本程序中用到了膨脹和閉合這兩個基本運算,最后還用了bwareaopen來去除對象中不相干的小對象。圖8腐蝕后圖像圖9平滑圖像的輪廓圖10從對象中移除小對象后圖像2.3.2牌照區(qū)域的分割對車牌的分割可以有很多種方法,本程序是利用車牌的彩色信息的彩色分割方法。根據(jù)車牌底色等有關(guān)的先驗知識,采用彩色像素點統(tǒng)計的方法分割出合理的車牌區(qū)域,確定車牌底色藍色RGB對應(yīng)的各自灰度范圍,然后行方向統(tǒng)計在此顏色范圍內(nèi)的像素點數(shù)量,設(shè)定合理的閾值,確定車牌在行方向的合理區(qū)域。然后,在分割出的行區(qū)域內(nèi),統(tǒng)計列方向藍色像素點的數(shù)量,最終確定完整的車牌區(qū)域。圖11行方向區(qū)域和最終定位出來的車牌2.3.3車牌進一步處理經(jīng)過上述方法分割出來的車牌圖像中存在目標物體、背景還有噪聲,要想從圖像中直接提取出目標物體,最常用的方法就是設(shè)定一個閾值T,用T將圖像的數(shù)據(jù)分成兩部分:大于T的像素群和小于T的像素群,即對圖像二值化。均值濾波是典型的線性濾波算法,它是指在圖像上對目標像素給一個模板,該模板包括了其周圍的臨近像素。再用模板中的全體像素的平均值來代替原來像素值。圖12裁剪出來的車牌的進一步處理過程圖2.4字符的分割與歸一化[m,n[m,n]=size(d),逐排檢查有沒有白色像素點,設(shè)置1<=j<n-1,若圖像兩邊s(j)=0,則切割,去除圖像兩邊多余的部分切割去圖像上下多余的部分根據(jù)圖像的大小,設(shè)置一閾值,檢測圖像的X軸,若寬度等于這一閾值則切割,分離出七個字符歸一化切割出來的字符圖像的大小為40*20,與模板中字符圖像的大小相匹配圖13字符分割與歸一化流程圖2.4.1字符分割在汽車牌照自動識別過程中,字符分割有承前啟后的作用。它在前期牌照定位的基礎(chǔ)上進行字符的分割,然后再利用分割的結(jié)果進行字符識別。字符識別的算法很多,因為車牌字符間間隔較大,不會出現(xiàn)字符粘連情況,所以此處采用的方法為尋找連續(xù)有文字的塊,若長度大于某閾值,則認為該塊有兩個字符組成,需要分割。圖14分割出來的七個字符圖像2.4.2字符歸一化一般分割出來的字符要進行進一步的處理,以滿足下一步字符識別的需要。但是對于車牌的識別,并不需要太多的處理就已經(jīng)可以達到正確識別的目的。在此只進行了歸一化處理,然后進行后期處理。圖15歸一化處理后的七個字符圖像2.5字符的識別字符的識別目前用于車牌字符識別(OCR)中的算法主要有基于模板匹配的OCR算法以及基于人工神經(jīng)網(wǎng)絡(luò)的OCR算法。基于模板匹配的OCR的基本過程是:首先對待識別字符進行二值化并將其尺寸大小縮放為字符數(shù)據(jù)庫中模板的大小,然后與所有的模板進行匹配,最后選最佳匹配作為結(jié)果。模板匹配的主要特點是實現(xiàn)簡單,當字符較規(guī)整時對字符圖像的缺損、污跡干擾適應(yīng)力強且識別率相當高。綜合模板匹配的這些優(yōu)點我們將其用為車牌字符識別的主要方法。模板匹配是圖象識別方法中最具代表性的基本方法之一,它是將從待識別的圖象或圖象區(qū)域f(i,j)中提取的若干特征量與模板T(i,j)相應(yīng)的特征量逐個進行比較,計算它們之間規(guī)格化的互相關(guān)量,其中互相關(guān)量最大的一個就表示期間相似程度最高,可將圖象歸于相應(yīng)的類。也可以計算圖象與模板特征量之間的距離,用最小距離法判定所屬類。然而,通常情況下用于匹配的圖象各自的成像條件存在差異,產(chǎn)生較大的噪聲干擾,或圖象經(jīng)預(yù)處理和規(guī)格化處理后,使得圖象的灰度或像素點的位置發(fā)生改變。在實際設(shè)計模板的時候,是根據(jù)各區(qū)域形狀固有的特點,突出各類似區(qū)域之間的差別,并將容易由處理過程引起的噪聲和位移等因素都考慮進去,按照一些基于圖象不變特性所設(shè)計的特征量來構(gòu)建模板,就可以避免上述問題。建立自動識別的代碼表建立自動識別的代碼表讀取分割出來的字符第一個字符與模板中的漢字模板進行匹配第二個字符與模板中的字母模板進行匹配待識別字符與模板字符相減,值越小相似度越大,找到最小的一個即為匹配的最好的識別完成,輸出此模板對應(yīng)值后5個字符與模板中的字母與數(shù)字模板進行匹配圖16字符識別流程圖此處采用相減的方法來求得字符與模板中哪一個字符最相似,然后找到相似度最大的輸出。汽車牌照的字符一般有七個,大部分車牌第一位是漢字,通常代表車輛所屬省份,緊接其后的為字母與數(shù)字。車牌字符識別與一般文字識別在于它的字符數(shù)有限,漢字共約50多個,大寫英文字母26個,數(shù)字10個。為了實驗方便,結(jié)合本次設(shè)計所選汽車牌照的特點,只建立了4個數(shù)字26個字母與10個數(shù)字的模板。其他模板設(shè)計的方法與此相同。首先取字符模板,接著依次取待識別字符與模板進行匹配,將其與模板字符相減,得到的0越多那么就越匹配。把每一幅相減后的圖的0值個數(shù)保存,即為識別出來的結(jié)果。圖17識別結(jié)果3.設(shè)計結(jié)果及分析通過以上的方法,我對多幅圖像進行了檢測,有較好的識別效果。下面是對另一幅車牌照的檢測,結(jié)果如圖1824所示。圖18圖19圖20圖21圖22圖23圖24對于光照條件不理想的圖象,可先進行一次圖象增強處理,使得圖象灰度動態(tài)范圍擴展和對比度增強,再進行定位和分割,這樣可以提高分割的正確率。而采用了色彩通道的牌照區(qū)域分割算法充分利用了牌照圖象的色彩信息,簡化了算法的實現(xiàn),加快了圖象的處理速度,具有較高的檢出正確率,而且整個過程用MATLAB語言編程實現(xiàn),無時間滯后感,可以滿足實時檢出的要求。但是在設(shè)計的過程中發(fā)現(xiàn),使用另一幅圖像后,識別效果始終沒有那么理想。需要做一定的設(shè)置后才能識別出相應(yīng)的字符。在車牌字符分割的預(yù)處理中,用到了對分割出的字符車牌進行均值濾波,膨脹或腐蝕的處理。這在對于有雜點的車牌是很有用的,因為這樣可以把字符與字符之間的雜色點去除,只有白色的字符和黑色的背景存在,這樣有利于的字符分割進行。字符識別過程使用的是模板匹配的方法,利用兩幅圖片相減的方法,找到相減后值最小的,即為相似程度最大的。模板的制作很重要,必須要用精確的模板,否則就不能正確的識別。對于識別錯誤情況的分析可知,主要原因:一是牌照自身的污漬等影響了圖象的質(zhì)量;二是牌照字符的分割失敗導(dǎo)致的識別錯誤;再就是部分字符的形狀相似性,比如,B和8;A和4等字符識別結(jié)果可能發(fā)生混淆的情況??傊M管目前牌照字符的識別率還不理想,但是只要在分割出的字符的大小、位置的歸一化,以及嘗試提取分類識別能力更好的特征值和設(shè)計分類器等環(huán)節(jié)上再完善,進一步提高識別率是完全可行的。程序源代碼4.1基于matlab的程序源代碼function[d]=main(jpg)I=imread('car.jpg');figure(1),imshow(I);title('原圖');I1=rgb2gray(I);figure(2),subplot(1,2,1),imshow(I1);title('灰度圖');figure(2),subplot(1,2,2),imhist(I1);title('灰度圖直方圖');I2=edge(I1,'robert',0.08,'both');figure(3),imshow(I2);title('robert算子邊緣檢測')se=[1;1;1];I3=imerode(I2,se);figure(4),imshow(I3);title('腐蝕后圖像');se=strel('rectangle',[40,40]);I4=imclose(I3,se);figure(5),imshow(I4);title('平滑圖像的輪廓');I5=bwareaopen(I4,2000);figure(6),imshow(I5);title('從對象中移除小對象');[y,x,z]=size(I5);myI=double(I5);%begin橫向掃描ticBlue_y=zeros(y,1);fori=1:yforj=1:xif(myI(i,j,1)==1)%如果myI(i,j,1)即myI圖像中坐標為(i,j)的點為藍色%則Blue_y的相應(yīng)行的元素white_y(i,1)值加1Blue_y(i,1)=Blue_y(i,1)+1;%藍色像素點統(tǒng)計endendend[tempMaxY]=max(Blue_y);%temp為向量white_y的元素中的最大值,MaxY為該值的索引(在向量中的位置)PY1=MaxY;while((Blue_y(PY1,1)>=120)&&(PY1>1))PY1=PY1-1;endPY2=MaxY;while((Blue_y(PY2,1)>=40)&&(PY2<y))PY2=PY2+1;endIY=I(PY1:PY2,:,:);%IY為原始圖像I中截取的縱坐標在PY1:PY2之間的部分%end橫向掃描%begin縱向掃描Blue_x=zeros(1,x);%進一步確定x方向的車牌區(qū)域forj=1:xfori=PY1:PY2if(myI(i,j,1)==1)Blue_x(1,j)=Blue_x(1,j)+1;endendendPX1=1;while((Blue_x(1,PX1)<3)&&(PX1<x))PX1=PX1+1;endPX2=x;while((Blue_x(1,PX2)<3)&&(PX2>PX1))PX2=PX2-1;end%end縱向掃描PX1=PX1-2;%對車牌區(qū)域的校正PX2=PX2+2;dw=I(PY1:PY2,:,:);t=toc;figure(7),subplot(1,2,1),imshow(IY),title('行方向合理區(qū)域');figure(7),subplot(1,2,2),imshow(dw),title('定位剪切后的彩色車牌圖像')imwrite(dw,'dw.jpg');[filename,filepath]=uigetfile('dw.jpg','輸入一個定位裁剪后的車牌圖像');jpg=strcat(filepath,filename);a=imread('dw.jpg');b=rgb2gray(a);imwrite(b,'1.車牌灰度圖像.jpg');figure(8);subplot(3,2,1),imshow(b),title('1.車牌灰度圖像')g_max=double(max(max(b)));g_min=double(min(min(b)));T=round(g_max-(g_max-g_min)/3);%T為二值化的閾值[m,n]=size(b);d=(double(b)>=T);%d:二值圖像imwrite(d,'2.車牌二值圖像.jpg');figure(8);subplot(3,2,2),imshow(d),title('2.車牌二值圖像')figure(8),subplot(3,2,3),imshow(d),title('3.均值濾波前')%濾波h=fspecial('average',3);d=im2bw(round(filter2(h,d)));imwrite(d,'4.均值濾波后.jpg');figure(8),subplot(3,2,4),imshow(d),title('4.均值濾波后')%某些圖像進行操作%膨脹或腐蝕%se=strel('square',3);%使用一個3X3的正方形結(jié)果元素對象對創(chuàng)建的圖像膨脹%'line'/'diamond'/'ball'...se=eye(2);%eye(n)returnsthen-by-nidentitymatrix單位矩陣[m,n]=size(d);ifbwarea(d)/m/n>=0.365d=imerode(d,se);elseifbwarea(d)/m/n<=0.235d=imdilate(d,se);endimwrite(d,'5.膨脹或腐蝕處理后.jpg');figure(8),subplot(3,2,5),imshow(d),title('5.膨脹或腐蝕處理后')%尋找連續(xù)有文字的塊,若長度大于某閾值,則認為該塊有兩個字符組成,需要分割d=qiege(d);[m,n]=size(d);figure,subplot(2,1,1),imshow(d),title(n)k1=1;k2=1;s=sum(d);j=1;whilej~=nwhiles(j)==0j=j+1;endk1=j;whiles(j)~=0&&j<=n-1j=j+1;endk2=j-1;ifk2-k1>=round(n/6.5)[val,num]=min(sum(d(:,[k1+5:k2-5])));d(:,k1+num+5)=0;%分割endend%再切割d=qiege(d);%切割出7個字符y1=10;y2=0.25;flag=0;word1=[];whileflag==0[m,n]=size(d);left=1;wide=0;whilesum(d(:,wide+1))~=0wide=wide+1;endifwide<y1%認為是左側(cè)干擾d(:,[1:wide])=0;d=qiege(d);elsetemp=qiege(imcrop(d,[11widem]));[m,n]=size(temp);all=sum(sum(temp));two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:)));iftwo_thirds/all>y2flag=1;word1=temp;%WORD1endd(:,[1:wide])=0;d=qiege(d);endend%分割出第二個字符[word2,d]=getword(d);%分割出第三個字符[word3,d]=getword(d);%分割出第四個字符[word4,d]=getword(d);%分割出第五個字符[word5,d]=getword(d);%分割出第六個字符[word6,d]=getword(d);%分割出第七個字符[word7,d]=getword(d);figure(9),imshow(word1),title('1');figure(10),imshow(word2),title('2');figure(11),imshow(word3),title('3');figure(12),imshow(word4),title('4');figure(13),imshow(word5),title('5');figure(14),imshow(word6),title('6');figure(15),imshow(word7),title('7');[m,n]=size(word1);%商用系統(tǒng)程序中歸一化大小為40*20,此處演示word1=imresize(word1,[4020]);word2=imresize(word2,[4020]);word3=imresize(word3,[4020]);word4=imresize(word4,[4020]);word5=imresize(word5,[4020]);word6=imresize(word6,[4020]);word7=imresize(word7,[4020]);figure(16),subplot(3,7,8),imshow(word1),title('1');subplot(3,7,9),imshow(word2),title('2');subplot(3,7,10),imshow(word3),title('3');subplot(3,7,11),imshow(word4),title('4');subplot(3,7,12),imshow(word5),title('5');subplot(3,7,13),imshow(word6),title('6');subplot(3,7,14),imshow(word7),title('7');imwrite(word1,'1.jpg');imwrite(word2,'2.jpg');imwrite(word3,'3.jpg');imwrite(word4,'4.jpg');imwrite(word5,'5.jpg');imwrite(word6,'6.jpg');imwrite(word7,'7.jpg');liccode=char(['0':'9''A':'Z''蘇豫陜魯']);%建立自動識別字符代碼表SubBw2=zeros(40,20);l=1;forI=1:7ii=int2str(I);t=imread([ii,'.jpg']);SegBw2=imresize(t,[4020],'nearest');ifl==1%第一位漢字識別kmin=37;kmax=40;elseifl==2%第二位A~Z字母識別kmin=11;kmax=36;elsel>=3%第三位以后是字母或數(shù)字識別kmin=1;kmax=36;endfork2=kmin:kmaxfname=strcat('字符模板\',liccode(k2),'.jpg');SamBw2=imread(fname);fori=1:40forj=1:20SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j);endend%以上相當于兩幅圖相減得到第三幅圖Dmax=0;fork1=1:40forl1=1:20if(SubBw2(k1,l1)>0|SubBw2(k1,l1)<0)Dmax=Dmax+1;endendendError(k2)=Dmax;endError1=Error(kmin:kmax);MinError=min(Error1);findc=find(Error1==MinError);l=l+1;endfigure(17),subplot(3,1,2),imshow(dw),title('車牌號碼:陜ABA223');%子程序:(getword子程序)function[word,result]=getword(d)word=[];flag=0;y1=8;y2=0.5;whileflag==0[m,n]=size(d);wide=0;whilesum(d(:,wide+1))~=0&&wide<=n-2wide=wide+1;endtemp=qiege(imcrop(d,[11widem]));[m1,n1]=size(temp);ifwide<y1&&n1/m1>y2d(:,[1:wide])=0;ifsum(sum(d))~=0d=qiege(d);%切割出最小范圍elseword=[];flag=1;endelseword=qiege(imcrop(d,[11widem]));d(:,[1:wide])=0;ifsum(sum(d))~=0;d=qiege(d);flag=1;elsed=[];endendendresult=d;%(qiege子程序)functione=qiege(d)[m,n]=size(d);top=1;bottom=m;left=1;right=n;%initwhilesum(d(top,:))==0&&top<=mtop=top+1;endwhilesum(d(bottom,:))==0&&bottom>1bottom=bottom-1;endwhilesum(d(:,left))==0&&left<nleft=left+1;endwhilesum(d(:,right))==0&&right>=1right=right-1;enddd=right-left;hh=bottom-top;e=imcrop(d,[lefttopddhh]);4.2基于VC++的程序源代碼函數(shù)說明:該函數(shù)將指定的文件中的DIB對象讀到指定的內(nèi)存區(qū)域中。除BITMAPFILEHEADER外的內(nèi)容都將被讀入內(nèi)存。HDIBWINAPIReadDIBFile(CFile&file){BITMAPFILEHEADERbmfHeader;DWORDdwBitsSize;HDIBhDIB;LPSTRpDIB;//獲取DIB(文件)長度(字節(jié))dwBitsSize=file.GetLength();//嘗試讀取DIB文件頭if(file.Read((LPSTR)&bmfHeader,sizeof(bmfHeader))!=sizeof(bmfHeader)){//大小不對,返回NULL。returnNULL;}//判斷是否是DIB對象,檢查頭兩個字節(jié)是否是"BM"if(bmfHeader.bfType!=DIB_HEADER_MARKER){//非DIB對象,返回NULL。returnNULL;}//為DIB分配內(nèi)存hDIB=(HDIB)::GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,dwBitsSize);if(hDIB==0){//內(nèi)存分配失敗,返回NULL。returnNULL;}//鎖定pDIB=(LPSTR)::GlobalLock((HGLOBAL)hDIB);//讀象素if(file.ReadHuge(pDIB,dwBitsSize-sizeof(BITMAPFILEHEADER))!=dwBitsSize-sizeof(BITMAPFILEHEADER)){//大小不對。//解除鎖定::GlobalUnlock((HGLOBAL)hDIB);//釋放內(nèi)存::GlobalFree((HGLOBAL)hDIB);//返回NULL。returnNULL;}//解除鎖定::GlobalUnlock((HGLOBAL)hDIB);//返回DIB句柄returnhDIB;}/************************************************************************函數(shù)說明:該函數(shù)將指定的DIB對象保存到指定的CFile中。該CFile由調(diào)用程序打開和關(guān)閉。BOOLWINAPISaveDIB(HDIBhDib,CFile&file){//Bitmap文件頭BITMAPFILEHEADERbmfHdr;//指向BITMAPINFOHEADER的指針LPBITMAPINFOHEADERlpBI;//DIB大小DWORDdwDIBSize;if(hDib==NULL){//如果DIB為空,返回FALSEreturnFALSE;}//讀取BITMAPINFO結(jié)構(gòu),并鎖定lpBI=(LPBITMAPINFOHEADER)::GlobalLock((HGLOBAL)hDib);if(lpBI==NULL){//為空,返回FALSEreturnFALSE;}//判斷是否是WIN3.0DIBif(!IS_WIN30_DIB(lpBI)){//不支持其它類型的DIB保存//解除鎖定::GlobalUnlock((HGLOBAL)hDib);//返回FALSEreturnFALSE;}//填充文件頭//文件類型"BM"bmfHdr.bfType=DIB_HEADER_MARKER;//計算DIB大小時,最簡單的方法是調(diào)用GlobalSize()函數(shù)。但是全局內(nèi)存大小并//不是DIB真正的大小,它總是多幾個字節(jié)。這樣就需要計算一下DIB的真實大小。//文件頭大?。伾泶笮?/(BITMAPINFOHEADER和BITMAPCOREHEADER結(jié)構(gòu)的第一個DWORD都是該結(jié)構(gòu)的大小)dwDIBSize=*(LPDWORD)lpBI+::PaletteSize((LPSTR)lpBI);//計算圖像大小if((lpBI->biCompression==BI_RLE8)||(lpBI->biCompression==BI_RLE4)){//對于RLE位圖,沒法計算大小,只能信任biSizeImage內(nèi)的值dwDIBSize+=lpBI->biSizeImage;}else{//象素的大小DWORDdwBmBitsSize;//大小為Width*HeightdwBmBitsSize=WIDTHBYTES((lpBI->biWidth)*((DWORD)lpBI->biBitCount))*lpBI->biHeight;//計算出DIB真正的大小dwDIBSize+=dwBmBitsSize;//更新biSizeImage(很多BMP文件頭中biSizeImage的值是錯誤的)lpBI->biSizeImage=dwBmBitsSize;}//計算文件大小:DIB大?。獴ITMAPFILEHEADER結(jié)構(gòu)大小bmfHdr.bfSize=dwDIBSize+sizeof(BITMAPFILEHEADER);//兩個保留字bmfHdr.bfReserved1=0;bmfHdr.bfReserved2=0;//計算偏移量bfOffBits,它的大小為Bitmap文件頭大?。獶IB頭大?。伾泶笮mfHdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+lpBI->biSize+PaletteSize((LPSTR)lpBI);//嘗試寫文件TRY{//寫文件頭file.Write((LPSTR)&bmfHdr,sizeof(BITMAPFILEHEADER));//寫DIB頭和象素file.WriteHuge(lpBI,dwDIBSize);}CATCH(CFileException,e){//解除鎖定::GlobalUnlock((HGLOBAL)hDib);//拋出異常THROW_LAST();}END_CATCH//解除鎖定::GlobalUnlock((HGLOBAL)hDib);//返回TRUEreturnTRUE;}/**************************************************************************函數(shù)說明該函數(shù)將24位真彩色圖轉(zhuǎn)換成256級灰度圖BOOLWINAPIConvertToGrayScale(LPSTRlpDIB){LPSTRlpDIBBits;//指向DIB的象素的指針LPSTRlpNewDIBBits;//指向DIB灰度圖圖像(新圖像)開始處象素的指針LONGlLineBytes;unsignedchar*lpSrc;//指向原圖像象素點的指針unsignedchar*lpdest;//指向目標圖像象素點的指針unsignedchar*ired,*igreen,*iblue;longlWidth;//圖像寬度和高度longlHeight;longi,j;//循環(huán)變量lWidth=::DIBWidth(lpDIB);//DIB寬度lHeight=::DIBHeight(lpDIB);//DIB高度RGBQUAD*lpRGBquad;lpRGBquad=(RGBQUAD*)&lpDIB[sizeof(BITMAPINFOHEADER)];//INFOHEADER后為調(diào)色板if(::DIBNumColors(lpDIB)==256)//256色位圖不作任何處理{returnTRUE;}if(::DIBNumColors(lpDIB)!=256)//非256色位圖將它灰度化{lLineBytes=WIDTHBYTES(lWidth*8*3);lpdest=newBYTE[lHeight*lWidth];lpDIBBits=(LPSTR)lpDIB+sizeof(BITMAPINFOHEADER);//指向DIB象素for(i=0;i<lHeight;i++)for(j=0;j<lWidth*3;j+=3){ired=(unsignedchar*)lpDIBBits+lLineBytes*i+j+2;igreen=(unsignedchar*)lpDIBBits+lLineBytes*i+j+1;iblue=(unsignedchar*)lpDIBBits+lLineBytes*i+j;lpdest[i*lWidth+j/3]=(unsignedchar)((*ired)*0.299+(*igreen)*0.588+(*iblue)*0.114);}//需要做三件事情:1、修改INFOHEADER2、增加調(diào)色板3、修改原圖像灰度值LPBITMAPINFOHEADERlpBI;lpBI=(LPBITMAPINFOHEADER)lpDIB;lpBI->biBitCount=8;//設(shè)置灰度調(diào)色板for(i=0;i<256;i++){lpRGBquad[i].rgbRed=(unsignedchar)i;lpRGBquad[i].rgbGreen=(unsignedchar)i;lpRGBquad[i].rgbBlue=(unsignedchar)i;lpRGBquad[i].rgbReserved=0;}lpNewDIBBits=::FindDIBBits(lpDIB);//找到DIB圖像象素起始位置lLineBytes=WIDTHBYTES(lWidth*8);//修改灰度值for(i=0;i<lHeight;i++)for(j=0;j<lWidth;j++){lpSrc=(unsignedchar*)lpNewDIBBits+lLineBytes*i+j;*lpSrc=lpdest[i*lWidth+j];}deletelpdest;}returntrue;}/************************************************************************函數(shù)說明:該函數(shù)用來對圖像進行閾值變換。對于灰度值小于閾值的象素直接設(shè)置灰度值為0;灰度值大于閾值的象素直接設(shè)置為255。BOOLWINAPIThresholdTrans(LPSTRlpDIBBits,LONGlWidth,LONGlHeight,BYTEbThre){//指向源圖像的指針unsignedchar*lpSrc;//循環(huán)變量LONGi;LONGj;//圖像每行的字節(jié)數(shù)LONGlLineBytes;//計算圖像每行的字節(jié)數(shù)lLineBytes=WIDTHBYTES(lWidth*8);//每行for(i=0;i<lHeight;i++){//每列for(j=0;j<lWidth;j++){//指向DIB第i行,第j個象素的指針lpSrc=(unsignedchar*)lpDIBBits+lLineBytes*(lHeight-1-i)+j;//判斷是否小于閾值if((*lpSrc)<bThre){//直接賦值為0*lpSrc=0;}else{//直接賦值為255*lpSrc=255;}}}//返回returnTRUE;}/*****************************************************************************函數(shù)說明:該函數(shù)用指定的模板(任意大小)來對圖像進行操作,參數(shù)iTempH指定模板的高度,參數(shù)iTempW指定模板的寬度,參數(shù)iTempMX和iTempMY指定模板的中心元素坐標,參數(shù)fpArray指定模板元素,fCoef指定系數(shù)。BOOLWINAPImyTemplate(LPSTRlpDIB){//指向復(fù)制圖像的指針LPSTRlpNewDIBBits;HLOCALhNewDIBBits;//指向要復(fù)制區(qū)域的指針unsignedchar*lpDst;LPSTRlpDIBBits;//指向DIB的象素的指針LONGlLineBytes;//圖像每行的字節(jié)數(shù)unsignedchar*lpSrc;//指向原圖像象素點的指針longlWidth;//圖像寬度和高度longlHeight;//計算結(jié)果INTfResult;//找到DIB圖像象素起始位置lpDIBBits=::FindDIBBits(lpDIB);lWidth=::DIBWidth(lpDIB);//DIB寬度lHeight=::DIBHeight(lpDIB);//DIB高度//計算圖像每行的字節(jié)數(shù)lLineBytes=WIDTHBYTES(lWidth*8);//暫時分配內(nèi)存,以保存新圖像hNewDIBBits=LocalAlloc(LHND,lLineBytes*lHeight);//判斷是否內(nèi)存分配失敗if(hNewDIBBits==NULL){//分配內(nèi)存失敗returnfalse;}//鎖定內(nèi)存lpNewDIBBits=(char*)LocalLock(hNewDIBBits);//初始化圖像為原始圖像memcpy(lpNewDIBBits,lpDIBBits,lLineBytes*lHeight);longi,j;//循環(huán)變量for(i=0;i<lHeight-1;i++){//每列for(j=0;j<lWidth-1;j++){//指向新DIB第i行,第j個象素的指針lpDst=(unsignedchar*)lpNewDIBBits+lLineBytes*(lHeight-1-i)+j;//指向DIB第i行,第j個象素的指針lpSrc=(unsignedchar*)lpDIBBits+lLineBytes*(lHeight-1-i)+j;fResult=(*lpSrc)-(*(lpSrc+1));//取絕對值if(fResult<0)fResult=-fResult;//判斷是否超過255if(fResult>255){//直接賦值為255*lpDst=255;}else{//賦值*lpDst=(unsignedchar)(fResult+0.5);}}}//復(fù)制變換后的圖像memcpy(lpDIBBits,lpNewDIBBits,lLineBytes*lHeight);//釋放內(nèi)存LocalUnlock(hNewDIBBits);LocalFree(hNewDIBBits);//返回returnTRUE;}/***************************************************************************函數(shù)說明:該函數(shù)用于對含車牌圖像進行水平投影運算,求取車牌子圖像的上下邊緣位置BOOLWINAPImyHprojectDIB(LPSTRlpDIB,LONGlWidth,LONGlHeight,int*iTop,int*iBottom){LPSTRlpDIBBits;//指向DIB的象素的指針LONGlLineBytes;//圖像每行的字節(jié)數(shù)unsignedchar*lpSrc;//指向原圖像象素點的指針unsignedcharpixel;//像素值inti,j;//計算結(jié)果INT*iResult;INTpzBottom,pzTop;boolfindPZ=false;//找到DIB圖像象素起始位置lpDIBBits=::FindDIBBits(lpDIB);//計算圖像每行的字節(jié)數(shù)lLineBytes=WIDTHBYTES(lWidth*8);iResult=newINT[lHeight];for(i=0;i<lHeight;i++)iResult[i]=0;for(j=lHeight/5;j<lHeight*0.8;j++){iResult[j]=0;for(i=0;i<lWidth;i++){lpSrc=(unsignedchar*)lpDIBBits+lLineBytes*j+i;pixel=(unsignedchar)(*lpSrc);if(pixel==255){iResult[j]++;}}if((!findPZ)&&iResult[j]>12){pzBottom=j;findPZ=true;}if(findPZ&&iResult[j]<12){pzTop=j;break;}}pzTop=pzBottom+55;pzBottom=pzBottom-20;//微量調(diào)整*iBottom=lHeight-pzBottom;*iTop=lHeight-pzTop;returntrue;}/***************************************************************函數(shù)說明:該函數(shù)用于對含車牌圖像進行垂直投影運算,求取車牌子圖像的左右邊緣位置BOOLWINAPImyVprojectDIB(LPSTRlpDIB,LONGlWidth,LONGlHeight,int*iLeft,int*iRight){LPSTRlpDIBBits;//指向DIB的象素的指針LONGlLineBytes;//圖像每行的字節(jié)數(shù)unsignedchar*lpSrc;//指向原圖像象素點的指針unsignedcharpixel;//像素值inti,j;//計算結(jié)果INT*iResult;INTpzLeft,pzRight;boolfindPZ=false;//找到DIB圖像象素起始位置lpDIBBits=::FindDIBBits(lpDIB);//計算圖像每行的字節(jié)數(shù)lLineBytes=WIDTHBYTES(lWidth*8);iResult=newINT[lWidth];for(i=0;i<lWidth;i++)iResult[i]=0;for(i=lWidth/5;i<lWidth*0.8;i++){iResult[i]=0;for(j=0;j<lHeight;j++){lpSrc=(unsignedchar*)lpDIBBits+lLineBytes*j+i;pixel=(unsignedchar)(*lpSrc);if(pixel==255){iResult[i]++;}}if((!findPZ)&&iResult[i]>10){pzLeft=i;findPZ=true;}pzRight=pzLeft+150;}*iLeft=pzLeft-10;*iRight=pzRight+10;returntrue;}/***************************************************************************函數(shù)說明:該函數(shù)對DIB圖像進行中值濾波。BOOLWINAPImyMedianFilter(LPSTRlpDIBBits,LONGlWidth,LONGlHeight,intiFilterH,intiFilterW,intiFilterMX,intiFilterMY){//指向源圖像的指針unsignedchar*lpSrc;//指向要復(fù)制區(qū)域的指針unsignedchar*lpDst;//指向復(fù)制圖像的指針LPSTRlpNewDIBBits;HLOCALhNewDIBBits;//指向濾波器數(shù)組的指針unsignedchar*aValue;HLOCALhArray;//循環(huán)變量LONGi;LONGj;LONGk;LONGl;//圖像每行的字節(jié)數(shù)LONGlLineBytes;//計算圖像每行的字節(jié)數(shù)lLineBytes=WIDTHBYTES(lWidth*8);//暫時分配內(nèi)存,以保存新圖像hNewDIBBits=LocalAlloc(LHND,lLineBytes*lHeight);//判斷是否內(nèi)存分配失敗if(hNewDIBBits==NULL){//分配內(nèi)存失敗returnFALSE;}//鎖定內(nèi)存lpNewDIBBits=(char*)LocalLock(hNewDIBBits);//初始化圖像為原始圖像memcpy(lpNewDIBBits,lpDIBBits,lLineBytes*lHeight);//暫時分配內(nèi)存,以保存濾波器數(shù)組hArray=LocalAlloc(LHND,iFilterH*iFilterW);//判斷是否內(nèi)存分配失敗if(hArray==NULL){//釋放內(nèi)存LocalUnlock(hNewDIBBits);LocalFree(hNewDIBBits);//分配內(nèi)存失敗returnFALSE;}//鎖定內(nèi)存aValue=(unsignedchar*)LocalLock(hArray);//開始中值濾波//行(除去邊緣幾行)for(i=iFilterMY;i<lHeight-iFilterH+iFilterMY+1;i++){//列(除去邊緣幾列)for(j=iFilterMX;j<lWidth-iFilterW+iFilterMX+1;j++){//指向新DIB第i行,第j個象素的指針lpDst=(unsignedchar*)lpNewDIBBits+lLineBytes*(lHeight-1-i)+j;//讀取濾波器數(shù)組for(k=0;k<iFilterH;k++){for(l=0;l<iFilterW;l++){//指向DIB第i-iFilterMY+k行,第j-iFilterMX+l個象素的指針lpSrc=(unsignedchar*)lpDIBBits+lLineBytes*(lHeight-1-i+iFilterMY-k)+j-iFilterMX+l;//保存象素值aValue[k*iFilterW+l]=*lpSrc;}}//獲取中值*lpDst=myGetMedianNum(aValue,iFilterH*iFilterW);}}//復(fù)制變換后的圖像memcpy(lpDIBBits,lpNewDIBBits,lLineBytes*lHeight);//釋放內(nèi)存LocalUnlock(hNewDIBBits);LocalFree(hNewDIBBits);LocalUnlock(hArray);LocalFree(hArray);//返回returnTRUE;}/*****************************************************************************函數(shù)說明:該函數(shù)用冒泡法對一維數(shù)組進行排序,并返回數(shù)組元素的中值。unsignedcharWINAPImyGetMedianNum(unsignedchar*bArray,intiFilterLen){//循環(huán)變量inti;intj;//中間變量unsignedcharbTemp;//用冒泡法對數(shù)組進行排序for(j=0;j<iFilterLen-1;j++){for(i=0;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論