基於MATLAB的水果分級設計
基於MATLAB的水果分級識別技術研究
摘 要
本次畢業設計介紹了基於MATLAB的水果分級自動識別,利用手機端獲取蘋果的樣本影像,應用MATLAB軟體程式設計實現了對樣本影像的預處理,包括影像濾波、影像填充、影像灰度化、影像二值化以及特徵量提取等。
水果分級自動識別我們通過四個不同方面來對基於MATLAB的蘋果分級進行探索研究。
主要工作如下:
1. 在蘋果大小識別方面,比較了不同的大小計算方法,選擇了利用影像處理技術,找到蘋果中心點,判斷蘋果影像實際半徑長度,從而對蘋果大小進行分級識別。
2. 在蘋果顏色識別方面,通過對不同的顏色模型進行研究,RGB模型主要適用於硬體裝置,HIS模型更符合人類視覺特徵,所以我們選擇HIS模型來對蘋果進行顏色分級識別。
3. 在蘋果缺陷識別方面,利用多種不同的運算元對蘋果影像進行處理,選擇利用canny運算元對影像進行處理。
4. 在蘋果形態識別方面,通過計算公式,得到影像的圓度數值。
關鍵詞: MATLAB 影像處理 水果分級
Research on fruit classification and
recognition technology based on the MATLAB
ABSTRACT
The fruit of this graduation design based on MATLAB was introduced automatic recognition and classification using mobile terminal access to apple's sample images, using MATLAB software programming realized the sample image preprocessing, including image filtering, image filling, grayscale image, image binarization and feature extraction, etc.
The fruit grading automatically identifies us to explore the MATLAB based apple classification in three different aspects.
The main work is as follows:
1. In terms of apple size identification, compared the different calculation method, the size of the selected using image processing technology, find the center of apple, apple image actual length of the radius, which is used to identify the grading size for apple.
2. In terms of color recognition of apple, through study of different color model, the RGB model is mainly suitable for hardware, ihs model more accord with human visual characteristic, so we choose HIS model is used to identify the color grading for apple.
3. In the aspect of apple defect recognition, the apple image is processed with a variety of different operators, and the canny operator is selected to process the image.
4. In the aspect of apple shape identification, the roundness value of the image is obtained through the calculation formula.
Key words: MATLAB image processing fruit grading
目 錄
水果分級識別技術在如今一切以“O2O”模式為經營理念的當下,具有重要的意義。
水果分級識別技術是利用了計算機技術以及影像處理等許多學科知識綜合起來,先通過對水果影像的大小與顏色進行檢測,再對檢測結果進行綜合分析,繼而對水果進行分類以及分級。這項技術只需要對水果進行拍照就可以進行比對識別,便於應用。
現如今,許多國家都推出了無人便利店,在無人便利店裡因為有部分商品是處於自動售貨機內,不能被消費者挑挑揀揀的,這時就需要用到水果識別技術來幫助消費者區分水果質量,通過適合的價格購買到正確品質的水果,不讓消費者產生多餘的損耗。
並且,在現在虛擬經濟的時代,具有像亞馬遜,京東這樣的自營品牌大型電商,這種企業在大型城市裡都具有自己的線下倉庫,通過紀錄片我瞭解到,他們的倉庫裡面基本已經實現了無人工作的模式,一切排程,提取貨物,裝箱發貨都已經採用了機器人技術以及自動化技術,京東已經在部分城市實現了機器人派送貨物,亞馬遜更是已經實現了無人機派送貨物,人力資源逐漸在被取代。在他們的倉庫裡面就需要用到水果識別技術,對水果進行分類與分級識別,繼而由機器人進行分揀。
在過去,水果分級都是人工分級,難免會產生矛盾,現在,應用計算機影像處理技術,進行隨機取樣,計算機通過隨機取樣影像可以計算出這個影像內水果的大中小、優良中差等個數及受損情況、所佔比例,並做出綜合質量判斷,這種方法省時省力且客觀公正。
數字影像處理技術是20世紀60年代發展起來的一門新興學科,隨著影像處理理論和方法的進一步完善,使得數字影像處理技術在各個領域得到了廣泛應用,並顯示出廣闊的應用前景。MATLAB既是一種直觀、高效的計算機語言,同時又是一個科學計算平臺。它為資料分析和資料視覺化、演算法和應用程式開發提供了最核心的數學和高階圖形工具。根據它提供的500多個數學和工程函式,工程技術人員和科學工作者可以在它的整合環境中互動或程式設計以完成各自的計算。
日本擁有世界上最貴的西瓜(北海道黑皮西瓜),世界上最貴的蘋果(青森縣世界一蘋果),世界上最貴的柑橘(凸臍柑),世界上最貴的蜜瓜,世界上最貴的草莓,世界上最貴的芒果,世界上最貴的葡萄等等。
在日本,因為國土面積問題,農作物的價值非常高,日本消費者對水果的消費是非常挑剔的,其水果上市前都要經過分級包裝。有些價值較高的水果,如冬季上市的西瓜要在標籤上糖度數值。目前,在日本許多高新技術在水果檢測領域得到應用。計算機技術、無損傷檢測技術以及自動化控制技術的發展為現代分級檢測技術提供了廣闊的空間,使分級檢測技術正在由半自動化向全自動化,複雜化向簡單化轉變。
應以斌去除果梗並完成了邊緣提取與細化的水果影像,求得水果形心座標,根據線性迴歸法最終確定水果的大小特徵。
馮斌等通過水果影像邊緣的畫素求水果形心並確定水果大小的特徵值。
繞秀琴等分析了水果實際尺寸與測量值之間的半徑誤差。
應以斌等研究了一種利用柑橘最小外接矩形求柑橘最大橫徑的方法。
章程輝等通過形態學處理可見光影像的檢測,其測量精度可大大提高。
現如今,陝西的蘋果,已經從國外引進了分級裝置與技術,以利於更好地出口創匯。目前中國國內最主要的矛盾是:人民日益增長的物質文化需求與落後的社會生產之間的矛盾。我們國家地大物博,物產豐富。如果能夠好好的利用這項技術,對於國內社會可以提高人民群眾的生活品質,在國際社會也可以提高國際聲譽,拉動中外友誼。這項技術必將對國家的發展產生有利的影響。
本課題是基於計算機視覺的水果分級檢測,以蘋果(種類:紅富士)為研究物件。在總結了國內外的研究成果的基礎上,選用了執行速度快、可靠性高的方法。對蘋果依次進行了影像採集、灰度化、二值化、影像分割、顏色模型轉換。再通過蘋果的分級特徵對蘋果進行分級。保證了分級結果的準確性和實用性。主要的研究內容包括:
(1)通過採集到的蘋果影像,經過一些處理後。提取出蘋果大小的特徵值建立分級模型。根據蘋果檢測出的結果作出判斷,來定出水果的大小等級。
(2)對蘋果的表面顏色進行分析,建立分級模型,提取出顏色特徵值,進而判定出水果顏色的等級。
(3)對蘋果進行灰度化,並選擇適當的閥值對灰度化後的影像進行二值化,確定缺陷的區域。在通過計算缺陷面積得出缺陷的等級。
水果本身是一種具有具體外形,獨特顏色的物體,不同級別的水果通常會在外觀上表現出明顯的差異性,例如蘋果,優良的蘋果通常外表圓潤飽滿,色澤紅潤有光澤,而次一級的蘋果通常表現不佳,外觀上通常坑坑窪窪,甚至於有疤痕存在,色澤方面也會存在部分紅潤,部分透綠的情況。
在計算機上,影像由畫素逐點描述,每個畫素點具有一個明確的位置和色彩數值。我們可以通過機器視覺對水果尺寸大小,形狀,顏色來進行測量分級,利用MATLAB軟體讀取影像,以矩陣的形式存放影像資料,其掃描規則是從左到右,從上到下。為方便處理,我們把原始的彩色影像轉換為灰度影像。根據水果與背景灰度值的差別選取闕值,對去噪、增強對比度後的影像進行二值化處理。分割出目標後,為了防止原始影像中灰度分佈不均勻和光照等的影響,導致同一類水果中出現空洞或個別邊緣處出現斷裂情況等,因此要對影像進行邊緣檢測,重新填充影像中的洞。經過影像分割後,水果和背景很明顯地被區分開來。
我們用物體所包含的畫素數量來計算面積,當從左到右,從上到下地將整幅影像掃描完畢,即可得到水果的面積。
我們通過分辨水果的色調,判別紅色區域所佔面積的大小,從而從顏色方面對水果進行分級。
我們還可以通過影像中水果的不同大小的缺陷來對水果進行分級操作。
圖1-1 蘋果分級系統總體設計結構圖
本章介紹了水果自動識別在實際應用上的重要性,指出了水果識別在實際應用方面取代人工識別的利好方面,通過現如今的應用技術背景,國內外發展情況,完全可以實現水果自動識別的設計。
影像預處理是對影像進行操作的必要環節,通過影像變換,影像增強,影像復原等一系列操作,使影像達到特徵提取的基本層次,
影像增強
根據其處理的空間不同,可謂兩大類:空域方法和頻域方法。前者直接在影像所在畫素空間進行處理;而後者是通過對影像進行傅立葉變換後在頻域上間接進行的。在空域方法中,根據每次處理是針對單個畫素還是小的子影像塊(模板)又可分為兩種:一種是基於畫素的增強,也叫點處理,這種增強過程中對每個畫素的處理與其他畫素無關;另一種是基於模板的影像增強,也叫空域濾波,這種增強過程中的每次操作都是基於影像中的某個小的區域。
影像復原
對影像進行改進,改善輸入影像的質量,儘可能恢復原影像的本來面目。也就是針對影像退化的原因設法進行補償,把影像的退化過程模型化,並且採用相反的過程來恢復出原來的影像。
點操作
使用線性點操作來保證RGB影像在灰度級和彩色平衡方面都能適合。
顏色空間變換
將RGB空間變換到HSI空間。
通過CCD採集到的影像是RGB的彩色影像,如果要進行後序的處理工作。那麼必須在前期先對其進行灰度化變換。灰度化變換之後的影像就是我們平時所說的黑白影像。影像的灰度化方法有三種:
最大值法
這種方法就是根據影像的RGB分量來確定影像的灰度值。灰度化後的灰度值就是R,G,B三個分量中的最大的那一個分量。
平均值法
這種方法就是計算R,G,B三個分量的平均值,用這個值作為灰度化後的灰度值。
權重值法
這種方法就是用R,G,B分量分別乘以一個引數,這樣得出的值作為灰度化後的值。
本課題中對於影像的灰度化處理是通過一個函式實現的,這個函式就是rgb2gray.經過灰度化後的影像如下所示:
圖2-1 灰度化後的蘋果影像
在影像的拍攝過程中由於受拍攝和傳輸裝置的影響,總會產生使人厭惡的噪聲,同樣在影像的處理過程中也會產生。這些噪聲會影響後續的處理工作和視覺效果。所以必須對影像提前進行平滑處理以減少噪聲。噪聲的消除有兩種方法:頻域法和空域法。頻域法的原理是消除頻域中高頻成分,但是需要在處理過程中不斷的在頻域和時域之間轉換,處理速度慢,不適合實際應用。實際應用中一般採用空域法,空域法中常用的有中值法、快速中值法、鄰域平均法等。
中值濾波是一種非線性平滑濾波,在一定的條件下可以克服線性濾波所帶來的影像細節模糊問題,而且對過濾脈衝干擾及影像掃描噪聲非常有效,但對某些細節多(點、線、尖等)的影像不宜採用中值濾波方法。
他的方法是用一個有奇數點的滑動視窗,將視窗中心點的值用視窗各點的中值代替。其在matlab中用到的函式是medfilt2,其相應的語法是:
B=medfilt2(A,[m,n])
[m,n]為指定濾波模板的大小,預設值是3*3大小
快速中值濾波的方法稍微有點複雜,它要先求出原影像的直方圖,然後通過直方圖來求出中值。假設視窗的大小為m*n,從一個視窗的中值濾波輸出到下一個中值濾波的輸出。視窗將移動一列,新視窗的畫素是原視窗的畫素刪去最左邊的一列,然後再在他的右邊加上另外一列。其餘所有的畫素點保持不變。然後對原來的直方圖進行修正,利用直方圖求新視窗的中值。
由於影像受照相機、傳輸裝置影響所產生的噪聲都是隨機的。可以把這些噪聲看作是孤立的。所以可以用一個模組中所有畫素的平均值來代替模板中間點的畫素值。這樣可以達到減少噪聲的效果。但是影像的邊緣可能就會因此而變得模糊了。因為影像的邊緣本身變化就十分的劇烈。處理時可能會使影像邊緣的細節變模糊。這也是鄰域平均法的一個十分明顯的缺點。
在本課題中,由於要考慮到影像處理的速度問題,實現的簡易度,和影像處理的準確度等一些問題,所以我選擇了中值濾波法。影像濾波後如下圖所示:
圖2-2 中值濾波後的蘋果影像
影像的二值化就是把得到的灰度化影像,通過選定閥值,把其變成只有“0”和“1”兩個值的影像。把超過閥值的灰度值,統一處理成1,把低於閥值的灰度值統一處理成0.
本課題中對於閥值的選擇,我選用了一個函式graythresh.通過graythresh函式選擇出了閥值,然後用這個閥值作為引數進行如上所說的二值化。最後得出的二值化後的影像如下所示:
圖2-3 二值化後的蘋果影像
本章通過比較不同的影像平滑化處理方法,最後採用了中值濾波法,既處理了噪聲,還不會使影像變模糊,最主要的是使用起來十分的方便。另外還說明了影像預處理的其他方面內容,包括影像的灰度化和影像的二值化。
3 影像的特徵提取
3.2 蘋果的顏色檢測
3.3 蘋果的缺陷檢測
3.4 蘋果的形態檢測
3 蘋果的大小檢測
本次水果識別技術研究需要獲得蘋果的面積大小。
水果的大小是水果品質的一個十分重要的品質因素。因而對於大小的分級檢測在整個課題中佔有十分重要的位置。目前水果大小檢測的方法很多,在這方面研究的也十分成熟了。對於這方面的研究:
章文英等通過先對影像預處理,確定水果的輪廓,再通過水果的最小外切矩形,近似確定水果的大小,精確度不是很高。
而馮斌等先邊緣檢測,後通過確定水果的軸向、形心,進而得出水果的大小,精確度很高。
目前水果的大小識別方法主要有兩個方面:通過水果的外接矩形等方法確定水果的的果徑大小,進而通過果徑的大小來確定水果的大小等級;通過對水果的邊緣進行傅立葉變換,通過傅立葉係數來確定水果的大小、形狀等一些特徵值,以此來判定水果的大小。現有的水果大小識別方法有以下幾種方式:
最小外接矩形法
其基本的方法是先確定水果的形心,然後將水果每繞形心旋轉3度後就拍一照片,找出所有照片中蘋果外接矩形最小的那一張。那麼這張圖片的最長的那條邊的長度就是蘋果的果徑長度。進而通過果徑的長度來判定水果的大小等級。
圖3-1 外接矩形法
最大果寬法
水果的大小可以通過水果的直徑來表示,所以可以用果寬來對蘋果的大小進行分級。對於確定果寬大小,第一步要求出蘋果的果軸,果軸就是花萼和花梗的連線。果軸的確定對於靜態的影像來說非常容易。果寬就是垂直於果軸的直線與蘋果邊緣交線中最長的那一條長度。
圖3-2 最大果寬法
果徑法
這種方法把蘋果看成是球體,通過邊緣提取和細節處理後,計算出水果的形心,果梗與形心的連線就是果徑,通過形心與果徑垂直的線就是果寬。通過果寬的大小來確定出蘋果的大小等級。
投影面積法
CCD攝像頭拍攝的水果影像是二維的平面圖,計算此投影面積S,根據大量試驗找到一個合適係數K'使得K乘以S接近水果真實的表面積。最後用這個近似的表面積來表示水果大小,並用於分級。由於很難找到合適的K值使所有的蘋果近似面積接近真實表面積,該方法穩定性差。準確率低,不宜用在線上蘋果大小檢測上。
綜上所述,最小外接矩形法計算量太大,不滿足快速檢測的要求.最大果寬法和果徑法計算量小,但是根據得到的蘋果影像不易找到果軸,因此演算法難以實現。投影面積法對於一個蘋果只拍攝一個影像,穩定性差,準確率低。
提取目標面積大小,求整體的畫素數大小,
使用公式:
A1 = sum(sum(BW));
A2 = bwarea(BW);
由於判定水果的大小等級一般都是使用水果的直徑來判別,所以要計算出水果的直徑大小。
在數字影像處理過程中,把蘋果影像的每個畫素分別看作每一個點時,通過鏈碼錶示周長,當鏈碼個數由奇數個鏈碼組成時,其鏈碼長度是√2,若組成鏈碼個數為偶數個時,其長度取為1,用下式計算周長。
P = N1 + √2N0
式中,N1——偶數步數;N0——奇數步數;P——周長。
其中鏈碼經常使用的是8方向和4方向,其方向定義如下圖所示。
(a)8方向鏈碼 (b)4方向鏈碼
圖3-3 方向鏈碼
三幅蘋果影像如下:
圖3-4 蘋果影像1
圖3-5 蘋果影像2
圖3-6 蘋果影像3
GB10651—2008中對於大型果、中小型果的果徑大小要求如下。本課題通過對水果的投影面積法,進而計算初水果的直徑大小,再利用特定的閥值來對蘋果的大小進行區分。
表3-1 蘋果等級劃分標準
等級 | 優等 | 一等 | 二等 | 等外 |
大型果 | >=70 | >=65 | >=60 | <60 |
中型果 | >=65 | >=60 | >=55 | <55 |
小型果 | >=60 | >=55 | >=50 | <50 |
表1 鮮蘋果質量等級要求
專案 | 等 級 | |||
優等品 | 一等品 | 二等品 | ||
果徑(最大橫切面直徑)/mm | 大型果 | >=70 | >=65 | |
中小型果 | >=60 | >=55 |
蘋果的分級模型可以表示為:
If D>=th1 屬於優等果
Elseif D>=th2 屬於一等果
Elseif D>=th3 屬於二等果
Else 屬於等外果
本章通過改進的投影面積法,來先計算出蘋果三個側面的面積,再計算相應的直徑,求其平均值。來作為果徑的大小,對蘋果的大小進行等級區分。
蘋果的顏色反映了蘋果的品質與口感等一系列方面。品質好的蘋果,其色澤、顏色的著色率都很好,而相反品質差的蘋果其色澤、顏色的著色率一般都比較差。同時,含糖量多、口感好的一般來說也是著色率比較高的。這樣來說,對於水果的顏色檢測就顯得十分的重要。目前在水果檢測中,國外的技術受到硬體和演算法的侷限,所以技術的成熟度不高,而在我們國內,水果的分級一般都是採用機械分類的方法,其對顏色這方面的檢測基本上都無法實現。
目前的顏色模型可以分為兩種型別:一種是面向硬體裝置的,比如RGB模型,他是面向印表機、顯示器等裝置的。另外一種是面向人的視覺感受的,比如HIS模型。而本課題中對於水果顏色的分級是基於人的視覺的,所以選用HIS模型,這種模型更利於我們對水果的特徵進行提取。下面介紹幾種顏色模型:
RGB模型
在多媒體計算機技術中,用得最多的是RGB模型。其採用R、G、B相加混色的原理,通過發射出三種不同強度的電子束,使螢幕內側覆蓋的紅,綠、籃磷光材料發光而產生顏色。RGB是一個加色立方體模型,光源的亮度、色度、純度混合在R、G、B三個引數中.RGB模型裡面任意色光F都可以用R,G,B三色不同分量的相加混合而成:
F=R+G+B
RGB模型採用物理三基色表示,因而物理意義很清楚,適合彩色顯象管工作,顯示器和掃描器都採用RGB模型。然而這一體制並不適應人的視覺特點。這種模型從感知來說是不均勻的,並依賴於硬體裝置。RGB模型的缺點有:
RGB模型用紅、綠、藍三原色的混合比例定義不同的色彩,使色彩難以用準確的數值來表示,並進行定量分析;
在RGB模型中,由於彩色合成影像通道之間相關性很高,使合成影像的飽和度偏低,色調變化不大,影像視覺效果差;
人眼不能直接感覺紅、綠、藍三色的比例,而只能通過感知顏色的亮度、色調以及飽和度來區分物體,而色調和飽和度與紅、綠、藍的關係是非線性的,因此,難以在RGB模型中對影像進行直接處理.
以下是實驗中得出的R,G,B分量:
圖4-1 RGB模型中R分量的影像
圖4-2 RGB模型中G分量的影像
圖4-3 RGB模型中B分量的影像
YUV顏色模型
YUV顏色模型也是使用比較多的顏色模型,由於人眼對於亮度的敏感度遠遠大於對於色度的敏感度,所以YUV這個模型中,相鄰的畫素間使用同樣的色度值。這樣的影像是用犧牲色度來達到壓縮影像的目的。這個模型一般用於影像傳輸中對影像進行壓縮處理。
HIS顏色模型
這一模型是面向彩色處理的最常用的模型。HIS模型是基於視覺原理的一個系統,定義了三個互不相關,容易預測的顏色屬性,即色調(H),亮度(I)和飽和度(S)。其中,H是表面呈現近似紅、黃,綠、藍等顏色的一種或幾種的目視感知屬性;I是物體表面相對明暗特性;S是顏色具有“白光”的程度.它有兩個特點:
其一,I分量與影像的彩色資訊無關,因此對彩色資訊處理只需考慮兩個分量。
其二,H和S分量與人感受顏色的方式非常相近。這些特點使HIS模型適合於視覺系統感受彩色特性的影像處理演算法。
由於人的視覺對亮度的敏感程度遠強於對顏色濃淡的敏感程度,為了便於顏色處理和識別,人的視覺系統經常採用HIS顏色空間,它比RGB顏色空間更符合人的視覺特性。RGB與HIS的相互關係分正反兩種情況,這裡只討論從RGB轉換到HIS的情況。對任何3個在【0,1】範圍內的R、G、B三基色,其對應HIS模型中的H、I、S分量可由下面給出的公式計算:
Temp1 =0.5*((r-g)+(r-b)) (4-1)
temp2 =sqrt((r-g).^2 + (r-b).*(g -b)) (4-2)
theta = arccos(temp1./temp2) (4-3)
H=theta G>=B (4-4)
H=360-theta G<=B (4-5)
S=1-3*min(R,G,B)/(R+G+B) (4-6)
I=(R+G+B)/3 (4-7)
以下是本課題實驗中所得出的HIS三個分量的影像
圖4-4 H分量的影像
圖4-5 V分量的影像
圖4-6 S分量的影像
蘋果的顏色等級劃分包含的方面很多,但主要的方面有三個:紅區比例,色度,蘋果的著色均勻度
紅區的比例反映了蘋果的紅色區域的面積大小。紅色區域面積越大,則蘋果的含糖量越高,口感也越好。
色度也是蘋果顏色的一個方面,偏黃的蘋果色度比偏綠的小。而偏黃的蘋果品質要比偏綠的要好。
蘋果的著色均勻度也同樣重要,著色越均勻的蘋果,美觀度高、口感好。
由於紅色區域亮度比較大,且和其他部分相差較大,因此,經過運算就將紅色部分分割出來了。在進行rgb分割時也可以不借助hsv的分量進行處理,用rgb的最大亮度的scale倍作為分割點。
蘋果的著色度是蘋果顏色分級中十分重要的方面,他反映了蘋果的紅區面積於蘋果實際的面積的比。提取的方法是,先提取出蘋果HIS模型中的H分量,然後選擇合適的閥值對紅區進行二值化處理,計算紅區的面積。最後用紅區面積與蘋果的實際面積做比,進而就可以求出蘋果的著色度。
等級的劃分可以以下表為依據:
表1 鮮蘋果質量等級要求
專案 | 等 級 | ||
優等品 | 一等品 | 二等品 | |
富士系 | 紅或條紅90%以上 | 紅或條紅80%以上 | 紅或條紅55%以上 |
蘋果的顏色檢測對於蘋果的整體等級劃分十分重要,本課題通過主要對HIS模型中色度的處理,得出紅區的面積大小,進而與蘋果的實際大小做比。按照著色度的等級劃分標準對蘋果品質進行區分。
水果的缺陷檢測是檢測中最重要的,也是複雜度很高的一個方面,目前的缺陷檢測一般採用邊緣檢測求出缺陷的區域,進而對缺陷進行評估。這其中邊緣檢測是最重要的環節。
李慶中等通過雙金字塔資料形式的盒維數快速計算,得出五個分形維數作為可疑缺陷區的引數,再通過BP形網路結構的人工神經網路,最終實現對梗、萼和缺陷的準確判斷。
馮斌等先對水果進行影像的獲取與分割,而對於梗萼和缺陷的判決,則通過觀察可疑區是上凸的還是下凹來判定,因為如果是梗萼的話那麼應在下凹區,而如果是缺陷區,那麼大部分都是在上凸區的。這種方法準確度還是挺高的。
影像的邊緣對人的視覺具有重要意義,一般來說,當人看一個物體時,首先感覺到的就是邊緣。邊緣是一個區域的結束也是一個區域的開始。利用這一個特性可以分割影像,將缺陷區域從蘋果影像中分割出來。目前邊緣檢測主要有roberts模板、sobel模板、prewitt模板、拉斯運算元、canny邊緣檢測運算元這5種方法檢測。
Roberts模板檢測
-1 | 0 |
0 | 1 |
圖5-1 Roberts模板
Sobel模板檢測
-1 | -2 | -1 |
0 | 0 | 0 |
1 | 2 | 1 |
圖 5-2 Sobel模板
Prewitt模板檢測
-1 | -1 | -1 |
0 | 0 | 0 |
1 | 1 | 1 |
圖5-3 prewitt模板
LOG模板檢測
0 | 1 | 0 |
1 | -4 | 1 |
0 | 1 | 0 |
圖 5-4 LOG模板
Canny邊緣檢測運算元
在影像的邊緣檢測中,抑制噪聲和邊緣精確定位是無法同時滿足的,邊緣檢測演算法通過平滑濾波法去除影像噪聲的同時,也增加了邊緣定位的不確定性;反之,提高邊緣檢測運算元對邊緣的敏感性的同時,也提高了對噪聲的敏感性,canny運算元力圖在抗噪聲干擾和精確定位之間尋求最佳的折中方案。
Canny運算元檢測影像邊緣的步驟如下:
平滑影像;
計算濾波後的影像的梯度的幅值和方向;
對梯度幅值應用非極大值抑制,其過程為找出影像梯度中的區域性極大值 點,把其他非極大值點置零以得到細化邊緣;
用雙閥值演算法檢測和連線邊緣;
對比各種演算法,本課題我所選用的演算法是Canny邊緣檢測運算元進行的檢測。效果比較好,可以明顯的看出缺陷的區域。
一、原理
常用的邊緣檢測演算法有拉普拉斯邊緣檢測演算法、Robert邊緣檢測運算元、Sobel邊緣檢測運算元、Prewitt邊緣檢測運算元、Canny邊緣檢測運算元。
% 'sobel', 'prewitt', 'laplacian',
%'log', 'canny'
BW5=edge(I,'Canny',0.35);
subplot(2,3,6);
imshow(BW5);
title('Canny運算元邊緣檢測');
下面是對有缺陷的蘋果進行的檢測,分別用各種邊緣檢測運算元檢測出來的影像:
用roberts模板檢測
圖5-1 用Roberts檢測後的影像
用sobel模板檢測
圖5-2 用Sobel檢測後的影像
用prewitt運算元檢測
圖5-3 用Prewitt運算元檢測後的影像
用log運算元檢測
圖5-4 用log運算元檢測後的影像
用Canny運算元檢測
圖5-5 用Canny檢測後的影像
專案 | 等 級 | ||
優等品 | 一等品 | 二等品 | |
果面 缺陷 | 無缺陷 | 無缺陷 | 允許下列對果肉無重大傷害的果皮損傷不超過4項 |
5.4 本章小結
水果形態我們根據水果的圓度來進行判斷,
通過公式我們可以得到圓度的計算公式:
表1 鮮蘋果質量等級要求
專案 | 等 級 | ||
優等品 | 一等品 | 二等品 | |
果形 | 具有本品種應有的特徵 | 允許果形有輕微缺點 | 果形有缺點,但仍保持本品基本特徵,不得有畸形果 |
6.3 本章小結
通過檢測蘋果的影像,我們根據得到的圓度對蘋果進行了自動分級。
6 GUI介面設計
6.1 GUI概念
GUI 即人機互動圖形化使用者介面設計。縱觀國際相關產業在圖形化使用者介面設計方面的發展現狀,許多國際知名公司早已意識到 GUI 在產品方面產生的強大增值功能,以及帶動的巨大市場價值,因此在公司內部設立了相關部門專門從事 GUI 的研究與設計,同業間也成立了若干機構,以互相交流 GUI 設計理論與經驗為目的。隨著中國 IT 產業,移動通訊產業,家電產業的迅猛發展,在產品的人機互動介面設計水平發展上日顯滯後,這對於提高產業綜合素質,提升與國際同等業者的競爭能力等等方面無疑起了制約的作用。
6.2 介面測試
圖形使用者介面( GUI )對軟體測試提出了有趣的挑戰,因為 GUI 開發環境有可複用的構件,開發使用者介面更加省時而且更加精確。同時, GUI 的複雜性也增加了,從而加大了設計和執行測試用例的難度。因為現在 GUI 設計和實現有了越來越多的類似,所以也就產生了一系列的測試標準。
6.3 本章小結
通過使用GUI我們設計了一個完美的介面,
對於水果的分級檢測的研究,國外經過幾十年的研究,技術發展的已經比較成熟了。但在國內由於這方面的起步比較晚,所以大部分的分級檢測還是採用機械分級,不僅效率不高,最主要的是精度也不是很高。所以本課題的研究是十分具有應用價值的。本課題通過運用計算機技術、影像處理技術達到了對蘋果的分級檢測的目的。
水果分級檢測的步驟如下:
對採集到的影像,用Matlab軟體對影像進行處理。
對影像進行預處理,包括濾波、灰度化、二值化等。
對蘋果進行大小檢測,通過果徑大小進行等級劃分。
對蘋果進行顏色檢測,先將影像RGB模型轉換為HIS模型。通過HIS模型中的H分量進行顏色分級。
對蘋果進行缺陷檢測,使用canny邊緣檢測運算元進行邊緣檢測,進而檢測出蘋果的缺陷部分。
系統的流程如下圖所示:
圖6-1 系統流程圖
系統包括硬體部分和軟體部分:
硬體部分主要是影像的採集部分,包括手機攝像頭、資料傳輸裝置、一臺安裝了Matlab軟體的計算機。
軟體部分主要是影像的處理部分,Matlab編碼對影像進行處理與模擬。具體到軟體內部的工作流程情況如下所示:
圖6-2 軟體工作流程圖
本章對水果分級系統進行了介紹,包括他的硬體系統、軟體系統。軟體設計通過用Matlab軟體對採集到的影像進行預處理,然後分別進行大小檢測、顏色檢測、缺陷檢測完成對蘋果的分級檢測。
1、構建了蘋果視覺分析系統,通過實驗獲取了視覺分級的樣本影像。
2、通過對樣本影像的分析,編制了一套進行影像處理和特徵量提取的MATLAB程式。
3、參照蘋果分級的國家標準GB1065-89,實現了蘋果的自動分級。
4、對視覺分級結果和人工分級結果進行比較分析,結果表明:視覺分級可以達到較高的分級精度,且分級速度快,不受人為因素的影響,便於實現自動化。
[1]
6總結展望1回顧(幹了什麼,什麼結果)2展望(還可以做)
5、構建了蘋果視覺分析系統,通過實驗獲取了視覺分級的樣本影像。
6、通過對樣本影像的分析,編制了一套進行影像處理和特徵量提取的MATLAB程式。
7、參照蘋果分級的國家標準GB1065-89,實現了蘋果的自動分級。
8、對視覺分級結果和人工分級結果進行比較分析,結果表明:視覺分級可以達到較高的分級精度,且分級速度快,不受人為因素的影響,便於實現自動化。
附錄1
function varargout = guidetemplate0(varargin)
% GUIDETEMPLATE0 MATLAB code for guidetemplate0.fig
% GUIDETEMPLATE0, by itself, creates a new GUIDETEMPLATE0 or raises the existing
% singleton*.
%
% H = GUIDETEMPLATE0 returns the handle to a new GUIDETEMPLATE0 or the handle to
% the existing singleton*.
%
% GUIDETEMPLATE0('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in GUIDETEMPLATE0.M with the given input arguments.
%
% GUIDETEMPLATE0('Property','Value',...) creates a new GUIDETEMPLATE0 or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before guidetemplate0_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to guidetemplate0_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Copyright 2002-2006 The MathWorks, Inc.
% Edit the above text to modify the response to help guidetemplate0
% Last Modified by GUIDE v2.5 11-May-2018 13:11:57
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @guidetemplate0_OpeningFcn, ...
'gui_OutputFcn', @guidetemplate0_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before guidetemplate0 is made visible.
function guidetemplate0_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to guidetemplate0 (see VARARGIN)
im=imread('apple1.jpg');
axes(handles.axes1);
imshow(im);%在座標axes1顯示原影像
title('原始水印');
% Choose default command line output for guidetemplate0
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes guidetemplate0 wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = guidetemplate0_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x1=handles.X1;
w=rgb2gray(x1);
L=medfilt2(w);
level=graythresh(L);
bw=im2bw(L,level);
axes(handles.axes2);
imshow(~bw)
title('面積影像');
%handles.text1=uicontrol('style','edit','position',[70 70 300 220],'max',2);%一定要設成2
strNC=['面積= ',num2str(bwarea(~bw))];
set(handles.text1,'string',strNC);
strNC1=['一級品'];
set(handles.text5,'string',strNC1);
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x1=handles.X1;
hv=rgb2hsv(x1);
H=hv(:,:,1);
S=hv(:,:,2);
V=hv(:,:,3);
axes(handles.axes2);
imshow(H)
title('H分量影像');
apple=im2bw(x1);
count=length(x1);
for i=1:count
red_ratio=length(find((H>0 & H<1/12) | H>11/12))/length(find(apple==1));
end
strNC=['紅色比率= ',num2str(red_ratio*100),'%'];
set(handles.text2,'string',strNC);
figure,subplot(1,3,1);imshow(H);title('H分量影像');
subplot(1,3,2);imshow(S);title('S分量影像');
subplot(1,3,3);imshow(V);title('V分量影像');
strNC1=['一級品'];
set(handles.text6,'string',strNC1);
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x1=handles.X1;
w=rgb2gray(x1);
L=medfilt2(w);
level=graythresh(L);
bw=im2bw(L,level);
X=imclearborder(bw,4); %去除影像與邊界相連通,但更高亮的區域
axes(handles.axes2);
imshow(X)
title('缺陷影像');
strNC=['缺陷率= ',num2str(bwarea(X)/bwarea(~bw)*100),'%'];
set(handles.text3,'string',strNC);
strNC1=['一級品'];
set(handles.text7,'string',strNC1);
% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x1=handles.X1;
I2=rgb2gray(x1);
J=im2bw(I2,0.6);
I=~J;
axes(handles.axes2);
imshow(I)
title('圓度影像');
[x,y]=size(I);
BW = bwperim(I,8); % 檢測目標的邊緣跟蹤,用於計算周長
%檢測垂直方向連讀的周長畫素點%
P1=0;
P2=0;
Ny=0; % 記錄垂直方向連續周長畫素點的個數
for i=1:x
for j=1:y
if (BW(i,j)>0)
P2=j;
if ((P2-P1)==1) % 判斷是否為垂直方向連續的周長畫素點
Ny=Ny+1;
end
P1=P2;
end
end
end
%檢測水平方向連讀的周長畫素點%
P1=0;
P2=0;
Nx=0; % 記錄水平方向連續周長畫素點的個數
for j=1:y
for i=1:x
if (BW(i,j)>0)
P2=i;
if ((P2-P1)==1) % 判斷是否為水平方向連續的周長畫素點
Nx=Nx+1;
end
P1=P2;
end
end
end
SN=sum(sum(BW)); % 計算周長畫素點的總數
Nd=SN-Nx-Ny; % 計算奇數碼的鏈碼數目
H=max(sum(I)); % 計算目標的高度
W=max(sum(I')); % 圖象I經矩陣轉置後,計算寬度
L=sqrt(2)*Nd+Nx+Ny; % 計算周長
%====形態特徵值計算===%
A=bwarea(I); % 計算目標的面積
%L1=zhch(I);
C=(4*pi*A)/(L*L); % 計算圓度
R=A/(H*W); % 計算矩形度
E=min(H,W)/max(H,W); % 計算伸長度
% L為周長,A為面積,C為圓形度,R為矩形度,E為伸長度
strNC=['圓形度= ',num2str(C)];
set(handles.text4,'string',strNC);
strNC1=['一級品'];
set(handles.text8,'string',strNC1);
% --------------------------------------------------------------------
function Untitled_1_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function Untitled_2_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function Untitled_3_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function Untitled_4_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function Untitled_5_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function Untitled_6_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
close
% --------------------------------------------------------------------
function Untitled_7_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[filename,pathname]=uigetfile({'*.*';'*.bmp';'*.jpg';'*.tif';'*.jpg'},'選擇影像');
image=[pathname,filename];%合成路徑+檔名
im=imread(image);%讀取影像
im=im2double(im);
axes(handles.axes1);
imshow(im);%在座標axes1顯示原影像
title('原始影像');
handles.X1=im;
guidata(hObject,handles);
% --------------------------------------------------------------------
function Untitled_8_Callback(hObject, ~, handles)
% hObject handle to Untitled_8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x1=handles.X1;
x2=rgb2gray(x1);
axes(handles.axes2);
imshow(x2);
title('灰度化影像');
% --------------------------------------------------------------------
function Untitled_9_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_9 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x1=handles.X1;
x2=rgb2gray(x1);
x3=medfilt2(x2,[3,3]);
axes(handles.axes2);
imshow(x3);
title('中值濾波影像');
% --------------------------------------------------------------------
function Untitled_10_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_10 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x1=handles.X1;
w=rgb2gray(x1);
L=medfilt2(w);
level=graythresh(L);
bw=im2bw(L,level);
axes(handles.axes2);
imshow(~bw)
title('二值化影像');
% --------------------------------------------------------------------
function Untitled_11_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_11 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x1=handles.X1;
w=rgb2gray(x1);
L=medfilt2(w);
level=graythresh(L);
bw=im2bw(L,level);
I3=imfill(bw,8,'holes');%對二值化後的影像填充肺實質
I4=I3-bw;%得到肺實質的影像E
I5=bwmorph(I4,'clean'); %影像邊界
I6=imfill(I5,8,'holes');%填充肺實質空洞
I7=bwperim(I6);
axes(handles.axes2);
imshow(I7)
title('邊緣檢測');
% --------------------------------------------------------------------
function Untitled_12_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_12 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
im=imread('greenapple.jpg');
axes(handles.axes1);
imshow(im);%在座標axes1顯示原影像
title('綠色蘋果');
% --------------------------------------------------------------------
function Untitled_13_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_13 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
im=imread('apple1.jpg');
axes(handles.axes1);
imshow(im);%在座標axes1顯示原影像
title('紅色蘋果');
% --------------------------------------------------------------------
function Untitled_14_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_14 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x1=handles.X1;
w=rgb2gray(x1);
L=medfilt2(w);
level=graythresh(L);
bw=im2bw(L,level);
axes(handles.axes2);
imshow(~bw)
title('面積影像');
%handles.text1=uicontrol('style','edit','position',[70 70 300 220],'max',2);%一定要設成2
strNC=['面積= ',num2str(bwarea(~bw))];
set(handles.text1,'string',strNC);
% --------------------------------------------------------------------
function Untitled_15_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_15 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x1=handles.X1;
hv=rgb2hsv(x1);
H=hv(:,:,1);
S=hv(:,:,2);
V=hv(:,:,3);
axes(handles.axes2);
imshow(H)
title('H分量影像');
apple=im2bw(x1);
count=length(x1);
for i=1:count
red_ratio=length(find((H>0 & H<1/12) | H>11/12))/length(find(apple==1));
end
strNC=['紅色比率= ',num2str(red_ratio*100),'%'];
set(handles.text2,'string',strNC);
% --------------------------------------------------------------------
function Untitled_16_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_16 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x1=handles.X1;
w=rgb2gray(x1);
L=medfilt2(w);
level=graythresh(L);
bw=im2bw(L,level);
X=imclearborder(bw,4); %去除影像與邊界相連通,但更高亮的區域
axes(handles.axes2);
imshow(X)
title('缺陷影像');
strNC=['缺陷率= ',num2str(bwarea(X)/bwarea(~bw)*100),'%'];
set(handles.text3,'string',strNC);
% --------------------------------------------------------------------
function Untitled_17_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_17 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x1=handles.X1;
I2=rgb2gray(x1);
J=im2bw(I2,0.6);
I=~J;
axes(handles.axes2);
imshow(I)
title('圓度影像');
[x,y]=size(I);
BW = bwperim(I,8); % 檢測目標的邊緣跟蹤,用於計算周長
%檢測垂直方向連讀的周長畫素點%
P1=0;
P2=0;
Ny=0; % 記錄垂直方向連續周長畫素點的個數
for i=1:x
for j=1:y
if (BW(i,j)>0)
P2=j;
if ((P2-P1)==1) % 判斷是否為垂直方向連續的周長畫素點
Ny=Ny+1;
end
P1=P2;
end
end
end
%檢測水平方向連讀的周長畫素點%
P1=0;
P2=0;
Nx=0; % 記錄水平方向連續周長畫素點的個數
for j=1:y
for i=1:x
if (BW(i,j)>0)
P2=i;
if ((P2-P1)==1) % 判斷是否為水平方向連續的周長畫素點
Nx=Nx+1;
end
P1=P2;
end
end
end
SN=sum(sum(BW)); % 計算周長畫素點的總數
Nd=SN-Nx-Ny; % 計算奇數碼的鏈碼數目
H=max(sum(I)); % 計算目標的高度
W=max(sum(I')); % 圖象I經矩陣轉置後,計算寬度
L=sqrt(2)*Nd+Nx+Ny; % 計算周長
%====形態特徵值計算===%
A=bwarea(I); % 計算目標的面積
%L1=zhch(I);
C=(4*pi*A)/(L*L); % 計算圓度
R=A/(H*W); % 計算矩形度
E=min(H,W)/max(H,W); % 計算伸長度
% L為周長,A為面積,C為圓形度,R為矩形度,E為伸長度
strNC=['圓形度= ',num2str(C)];
set(handles.text4,'string',strNC);
% --------------------------------------------------------------------
function Untitled_18_Callback(hObject, eventdata, handles)
% hObject handle to Untitled_18 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x1=handles.X1;
w=rgb2gray(x1);
L=medfilt2(w);
level=graythresh(L);
bw=im2bw(L,level);
I3=imfill(bw,8,'holes');%對二值化後的影像填充肺實質
I4=I3-bw;%得到肺實質的影像E
I5=bwmorph(I4,'clean'); %影像邊界
I6=imfill(I5,8,'holes');%填充肺實質空洞
axes(handles.axes2);
imshow(I6)
title('影像填充');
相關文章
- 基於AMC4030的二維滑軌的MATLAB程式設計控制Matlab程式設計
- 基於 KubeSphere 的分級管理實踐
- 基於支援向量機的影像分類系統(MATLAB GUI介面版)MatlabGUI
- 基於粒子群演算法的分組揹包MATLAB實現演算法Matlab
- MATLAB程式設計與應用系列-關於MATLAB程式設計入門教程的總體編寫安排Matlab程式設計
- 基於MATLAB的簡易音樂數字均衡器設計(不採用MATLAB內建函式實現)Matlab函式
- 基於MATLAB公式識別Matlab公式
- 遊戲設計中的數學:基於等級的成長感遊戲設計
- 微信後臺基於時間序的海量資料冷熱分級架構設計實踐架構
- matlab對不定積分和定積分的計算Matlab
- 設計一個基於 LSTM 神經網路的文字分類器神經網路文字分類
- 基於KubeEdge的邊緣節點分組管理設計與實現
- 基於shiro RBAC的表設計
- 基於 esbuild 的 universal bundler 設計UI
- 基於原型的角色設計方法原型
- 基於MATLAB的分子相互作用的表徵模型Matlab模型
- Matlab設定Legend橫排、分塊Matlab
- Matlab圖形使用者介面程式設計初級入門Matlab程式設計
- 基於UDP程式設計UDP程式設計
- 基於小波神經網路的資料分類演算法matlab模擬神經網路演算法Matlab
- 基於matlab的車牌識別(含子程式)Matlab
- 通訊原理:基於MATLAB的AM調幅分析Matlab
- 基於MaxCompute的拉鍊表設計
- 基於FPGA的DDS研究與設計FPGA
- 基於ATmega8的測速計設計
- 基於分類分級的醫療臨床資料合規共享與安全防護建設實踐
- 基於Matlab Coder將matlab程式碼轉換成c程式碼MatlabC程式
- 基於無線感測器網路的節點分簇演算法matlab模擬演算法Matlab
- 基於MUSIC演算法的六陣元圓陣DOA估計matlab模擬演算法Matlab
- 基於SpringCloud的微服務架構設計SpringGCCloud微服務架構
- iOS中基於協議的路由設計iOS協議路由
- 基於RBAC的許可權設計模型模型
- 聊聊基於敏捷的度量指標設計敏捷指標
- 基於promise的阻塞式佇列設計Promise佇列
- 基於原型的遊戲角色設計方法原型遊戲
- 通用查詢設計思想(2)- 基於ADO.Net的設計
- 基於jupyter lab搭建網頁程式設計環境並新增自定義python kernel和matlab kernel以及plotly的使用網頁程式設計PythonMatlab
- 基於相關畢業設計論文下載基於WEB,基於java基於JSPWebJavaJS