1 / 51

數位影像處理 第九章 影像分割

數位影像處理 第九章 影像分割. 班   級 : 四電四 姓   名 : 李孟螢 學號 :109610339. 前言 :. 閥值運算 閥值的應用 設定合適的閥值 可適性閥值運算 邊緣閥值 導數與邊緣 二階導數 Canny 邊緣偵測 Houngh 轉換 在 MABLAB 中執行 Houngh 轉換. 9.1 導論 分割 (segmentation): 指將影像按照組合的部分分割,或將影像 中各個物件分割開來。 本章節主要探討 : 閥值運算與邊緣偵測。. 9.2 閥值運算

jaden
Download Presentation

數位影像處理 第九章 影像分割

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 數位影像處理第九章 影像分割 班   級:四電四 姓   名:李孟螢 學號:109610339

  2. 前言: • 閥值運算 • 閥值的應用 • 設定合適的閥值 • 可適性閥值運算 • 邊緣閥值 • 導數與邊緣 • 二階導數 • Canny 邊緣偵測 • Houngh 轉換 • 在MABLAB中執行Houngh轉換

  3. 9.1導論 分割(segmentation): 指將影像按照組合的部分分割,或將影像 中各個物件分割開來。 本章節主要探討:閥值運算與邊緣偵測。

  4. 9.2 閥值運算 分成兩種1.單一閥值2.雙重閥值 9.2.1 單一閥值 灰階影像要轉為二元(黑白)數位影像, 必須先將原始影像中設定灰階值 T,依照每 個像素灰階值大小,將像素轉換黑色或白色 : 灰階值 >T,像素轉換成白色 灰階值 ≦T,像素轉換成黑色

  5. 利用MATLAB 來進行閥值運算,將8位元 影像儲存成變數 X。使用imshow來檢測結果。 下圖影像是暗色背景中散落著淺色稻殼 >>r = imread ( ‘ rice.tif ’ ) ; >> imshow ( r ) , figure , imshow ( r > 110 ) 圖9.1

  6. 而淺素背景暗色物體的影像也可以利用相同的處理方式 : >>b = imread ( ‘ bacteria.tif ’ ) ; >> imshow ( b ) , figure , imshow ( b > 100 ) 圖9.2

  7. 向量化代表將整個矩陣或向量進行一項 運算可以不必透過迴圈或一組巢狀迴圈來進 行運算。指令 X > T 會將像素灰階值大於 T 者轉換成 1 ,而小於或等於 T 者轉換成 0 , 得到的 0 或 1 的矩陣,就是二元數位影像。

  8. 除了上面的方法,在MATLAB還可使用函 數 im2bw,對任何資料型態的影像進行閥值 運算,一般語法如下: 以下是圖9.19.2 的另一個方法 >>im2bw ( image , level ) ; >>im2bw ( r , 0.43 ) ; >> im2bw ( b , 0.39 ) ;

  9. 除了可以從影像中擷取某個物體,閥值 運算還可以顯示影像中隱藏的特性。 例如影像paper.tif看起來是全白,因為所 有的灰階值都很高。但設定高數值的閥值,結 果會出現超多黑點。 >>p = imread(‘ paper.tif ’) ; >> imshow ( p ) , figure , imshow ( p > 124 )

  10. 圖9.3白紙運算閥值

  11. 9.2.2 雙重閥值 設定閥值 T1 與 T2 : 利用單一閥值的方法加以修,就成可成為雙 重閥值運算: X>T1&X>T2 因 & 所以必須兩個不等式成立結果才會為 1。 灰階值介於T1與T2,則像素轉換成白色 灰階值其他數值,則像素轉換為黑色

  12. 指令是先將索引影像 spine.tif 轉換成八 位元灰階影像,然後再進行閥值運算: 結果雙重閥值顯示出脊椎一些比較細緻部 分,這是單一閥值無法做到。也使用im2bw得 到相似結果。 >>[ x , map ] = imread(‘ spine.tif ’) ; >> s = uint8 ( 256 * ind2gray ( x , map ) ); >> imshow ( s ) , figure , imshow ( s > 115 & s < 125 ); >> imshow ( im2bw ( x , map , 0.45 ) & ~ im2bw ( x , map , 0.5 ) )

  13. 閥值計算後 原始影像 圖9.4

  14. 9.3 閥值的應用 閥值運算可適用於下列情況: • 去除影像中不需要的細節,留下基礎要素。 • 顯示影藏的特性。 3. 還可用於其他用途,如將文字或雜亂背景去除。

  15. 雜亂背景去除的例子 >>r = read ( 256 ) * 128 + 127 ; >>t = imread ( ‘ text.tif ‘ ); >> s = uint8 ( r * double ( not ( t ) ) ); >> imshow ( s ) , figure , imshow ( s > 115 & s < 125 ); >> imshow ( tr > 100) 圖9.5

  16. 9.4 設定適合的閥值 閥值運算中計算物體的大小或數量,必須設 定適合的閥值。設定數值太大或太小都會有影響 。假設利用im2bw進行閥值運算,閥值 t 的範圍 為 0 < t < 1 。 圖9.6

  17. 要找到適合閥值的方 法就是將影像直方圖視為 一種機率分布,這最佳閥 值法叫做Otsu演算法。 Otsu 演算法可以利用 MATLAB中函數 graythresh 執行。左圖為函數計算出 的結果。

  18. >>imshow(im2bw(n,tn))>>figure,imshow(im2bw(r,tr))>>figure,imshow(im2bw(b,tb))>>figure,imshow(im2bw(e,te))>>imshow(im2bw(n,tn))>>figure,imshow(im2bw(r,tr))>>figure,imshow(im2bw(b,tb))>>figure,imshow(im2bw(e,te)) 再利用im2bw對影像進行閥值運算:

  19. 圖9.7

  20. >> c = imread(‘circles.tif’);>> x = ones(256,1)*[1:256];>> c2 = double(c).*(x/2+50)+(1-double(c)).*x/2;>> c3 = uint8(255*mat2gray(c2));>>t = graythresh(c3);>> ct = im2bw(c3,t);>> figure,imshow(c3),figure,imshow(ct); 9.5 可適性閥值運算 有時單一閥值是不能完全取出物體影像。這 在物體與背景亮度不均勻狀況下就有可能發生。 例如:將背景與圓形亮度不均來做閥值運算 結果不佳,不是每個物體都可以從背景擷取出 來,無論在哪一層都無法將圓形從背景取出。

  21. 圓形影像 c3 利用閥值計算 ct 圖9.8

  22. >> p1=c3(:,1:64);>> p2=c3(:,65:128);>> p3=c3(:,129:192);>> p4=c3(:,193:256);>> g1=im2bw(p1,graythresh(p1));>> g2=im2bw(p2,graythresh(p2));>> g3=im2bw(p3,graythresh(p3));>> g4=im2bw(p4,graythresh(p4));>>imshow([g1 g2 g3 g4]) 依照上面的情形可以將影像切成小塊, 再去對每一塊分別設定閥值。

  23. 將影像切割 分別進行閥值運算 圖9.9

  24. 9.6 邊緣偵測 所謂的邊緣指的是像素值之間可見的差 異可以用邊緣來測量影像中物體大小,從背 景取出特定物體,加以辨識及分類物體。而 最常用在邊緣偵測的MATLAB指令為: edge ( image , ‘ method ‘parameters . . . )

  25. 圖9.10第二行第三行的灰階值很明顯不 同數值,差異超過 100。就算用肉眼也可以 察覺這樣灰階值的差異,這章節目的是要找 出真測影像邊緣的方法。 圖9.10

  26. 9.7導數及邊緣 從圖9.11左至右的灰階值,就可發現兩 種邊緣:灰階值變化緩慢的斜坡邊緣 (ramp edge) ,和灰階值忽然改變的階梯邊緣 (step edge) 或是理想邊緣 (ideal edge )。 圖9.11

  27. 假設圖9.11剖面函數為f(x),則導數為 f‘(x),為圖9.12。剖面中保持不變的其導數 為 0,起伏或是有差異的則非 0。 圖9.12

  28. 其大小 ,

  29. 9.7.2 一些邊緣偵測濾波器 水平與垂直濾波器可以偵測到影像中水 平與垂直的邊緣,影像就會出現合理的亮度。 但結果影像的邊緣可能會有顫抖。 搭配Prewitt濾波器(Prewitt filters ) 從 另一個方向來平滑影像就可以改善了。

  30. >>ic=imread('ic.tif'); >> px=[-1 0 1;-1 0 1;-1 0 1]; >> icx=filter2(px,ic); >> figure,imshow(icx/255) >> py=px'; >> icy=filter2(py,ic); >> figure,imshow(icy/255) 依實際例子:

  31. 原始影像 凸顯垂直邊緣 凸顯水平邊緣 圖9.13 代入 Prewitt 濾波器

  32. >>edge_p=sqrt(icx.^2+icy.^2); >>figure,imshow(edge_p/255) >>edge_t=im2bw(edge_p/255,0.3); >>figure,imshow(edge_t) 我們也可以產生凸顯所有邊緣的影像: 凸顯邊緣 再經過閥值運算 圖9.14

  33. >> edge_p=edge(ic,'prewitt');>> figure,imshow(edge_p); 可以直接使用指令執行preaitt偵測邊緣 濾波器。 圖9.15 edge 函數使用Prewitt濾波器

  34. 圖9.15與9.14有所不同,原因是函數 edge除了取濾波器平方總合的平方根,還 做了額外的運算。 還有其他邊緣偵測濾波器,Roberts 交 叉梯度濾波器和Sobel濾波器。兩者執行結 果非常相素,會以中心的差異濾波器的反方 向再執行平滑濾波器。

  35. >> edge_r=edge(ic,‘roberts’);>>figure,imshow(edge_r)>>edge_s=edge(ic,‘sobel’);>>figure,imshow(edge_s) Roberts濾波結果 Sobel濾波結果 圖9.16

  36. 三個濾波器中,Sobel濾波器效果可能 最好,邊緣偵測明顯,即使有雜訊仍有一的 效果。

  37. 9.8二階導數 水平及垂直兩方向的二階導數總和稱為 Laplacian ,可使用二階導數進行邊緣偵測 。不過二階導數雜訊的缺點是非常容易受到 雜訊干擾。而Laplacian(取絕對值或平方後) 會產生雙重邊緣。 雖然執行完離散Laplacian濾波結果無誤 ,但與之前的Prewitt和Sobel方法比較,仍 然雜亂許多。

  38. edge 函數 使用Prewitt濾波器 離散Laplacian 濾波結果 Sobel濾波結果

  39. 9.8.2 零交錯 Laplacian濾波器比較適合用來找出零交錯 (zero crossings ) 的位置濾波結果出來為零的地 方則是邊緣位置,通常都是濾波後改變正負號的 地方。而濾波後必須符合以下條件: 1.灰階值為負,且要和灰階值為正的像素直角相鄰。 2.像素值為零,且必須介於正和負的像素之間。

  40. 但結果並不理想,太多灰階值改變的地 方被視為邊緣了。要去除這誤差可以利用 Marr-Hildreth 方法 : 1.使用高絲濾波器來平滑影像。 2.使用Laplacian濾波器對結果進行旋積。 3.找出零交錯。 這方法偵測出的邊緣與生物視覺相近。使用Log 參數和zerocross參數,差異在於zerocross可以 自行設定濾波器,代入Log濾波器然後再找零交 錯的結果。

  41. 零交錯偵測邊緣 先使用Log濾波器

  42. 9.9Canny邊緣偵測 Canny邊緣偵測,設計滿足邊緣偵測的三項要求: 1.降低錯誤率 2.邊緣定位 3.單一反應

  43. Canny邊緣偵測 edge(ic,'canny',[0,0.05]); edge(ic,'canny',[0.01,0.5]);

  44. 9.10Hough轉換 Hough轉換(Hough Transform)原本設 計用於偵測影像中的線條,但修改一下也可 以偵測其他形狀,影像中的每個點都掉轉換 域的一條直線上。轉換域上最多交叉線的點 會對應到影像中最明顯的那條線。不過 Hough轉換法仍然無法偵測到垂直線條。

  45. 9.11 在MATLAB中執行Hough轉換 利用hough.m的副程式:

  46. >>c=imread('cameraman.tif'); >>hc=hough(c); >>imshow(mat2gray(hc)*1.5) >>max(hc(:)) >>[r,theta]=find(hc==95)

  47. 利用Hough轉換後結果

  48. >>c=imread('cameraman.tif'); >>c2=imadd(imdivide(c,4),192); >>imshow(c2) >>houghline(c2,r,theta) 使用C2目的是為了讓影像亮度,更清晰

  49. 執行houghline

  50. >> [r,theta]=find(hc>80) >> houghline(c,r(8),theta(8)) >> houghline(c,r(6),theta(6))

More Related