參考 題型範例 - 全國高級中等學校技藝競賽平台 工業類
題目:影像處理之邊緣偵測實作
問題描述
在影像處理中,邊緣偵測是基礎且重要的關鍵技術。其有助於提取影像中的形狀或物體輪廓特徵,因而被廣泛用於自動駕駛、工業瑕疵檢測、醫學影像分析等領域。Sobel 是常見的邊緣偵測技術之一,其演算法如下:
  1. 輸入一張彩色影像(RGB Ⅰmage),其大小為高度 $(H)\times$寬度$(W)\times 3$。每個像素由紅色($R$)、綠色($G$)、藍色($B$)三種顏色組成,每種顏色分別用 8 位元表示。
  2. 將彩色影像轉換為灰階影像(GrayImage) ,這是許多影像處理技術的基礎步驟。使用如下的轉換公式:
  3. $Gray(x,y)=0.3\times R(x,y)+0.59\times G(x,y)+0.11\times B(x,y)$
     $(1)$
  4. 利用 Sobel 邊緣偵測方法對灰階影像進行處理。使用水平及垂直 Sobel 運算子進行卷積操作,計算水平和垂直邊緣的梯度。其中,水平($x$)方向梯度 $G_x$ 如方程式(2)所示。
  5. $ G_x=\begin{bmatrix} -1 & 0 & 1\\ -2 & 0 & 2\\ -1 & 0 & 1\end{bmatrix}\ast Gray $
     $(2)$
    垂直方向($y$)梯度$G_y$則如方程式(3)所示:
    $ G_x=\begin{bmatrix} -1 & -2 & -1\\ 0 & 0 & 0\\ 1 & 2 & 1\end{bmatrix}\ast Gray $
     $(3)$
    其中, '$\ast$' 表示卷積(Convolution)操作,可以理解為一種「滑動窗口」的操作過程。首先將一個小型矩陣(即卷積核)覆蓋在影像的某一個區域上,通常從影像的左上角開始。如圖一所示,卷積核與該區域的每個像素值相乘,再將這些乘積加總,此加總結果將成為新影像在該位置的像素值。接著我們將卷積核向右移動一個像素位置,重複相同的計算過程。當移動到一行的末尾後,卷積核會移動到下一行的起始位置,繼續執行相同的操作。這樣逐像素地掃描整個影像,最終可獲得經卷積處理的新影像。


    輸入影像
    $\ast$
    卷積核
    $=$
    輸出影像

    $y_{11}=(1\times a_{11})+(2\times a_{12})+(3\times a_{13})+$
               $(4\times a_{21})+(5\times a_{22})+(6\times a_{23})+$
               $(7\times a_{31})+(8\times a_{32})+(9\times a_{33})$
    $y_{12}=(2\times a_{11})+(3\times a_{12})+(6\times a_{13})+$
               $(5\times a_{21})+(6\times a_{22})+(8\times a_{23})+$
               $(8\times a_{31})+(2\times a_{32})+(1\times a_{33})$
    $y_{21}=(4\times a_{11})+(5\times a_{12})+(6\times a_{13})+$
               $(7\times a_{21})+(8\times a_{22})+(2\times a_{23})+$
               $(5\times a_{31})+(6\times a_{32})+(8\times a_{33})$
    $y_{22}=(5\times a_{11})+(6\times a_{12})+(8\times a_{13})+$
               $(8\times a_{21})+(2\times a_{22})+(1\times a_{23})+$
               $(6\times a_{31})+(8\times a_{32})+(2\times a_{33})$
    圖一、卷積操作

  6. 在獲得與後,藉由方程式(4)可進一步計算得出最終邊緣偵測結果:
  7. $G=\sqrt{G_x^2+G_y^2}$
程式功能:
  1. 使用者能選取要輸入的影像圖檔,可選擇包括(jpg,png,bmp,tif等)。
  2. 使用者能點選功能按鈕,將輸入的彩色影像轉換為灰階影像。
  3. 使用者能點選功能按鈕,將輸入的彩色影像轉換為邊緣偵測後的影像。
  4. 使用者能依照自己的需求自由命名檔案及選擇格式(jpg, png, bmp, tif),並儲存當前輸出結果,包括灰階影像與邊緣偵測後的影像。

程式執行範例:
  1. 當程式執行時,會出現圖形使用者介面,如圖二所示。使用者可點選讀取影像按來選擇輸入影像。

  2. 圖二、讀取影像示意圖

  3. 當使用者開啟彩色影像檔後,程式會自動顯示,如圖三所示。
  4. (a)

    (b)

    圖三、賣取影像結果示意圖:(a)範例一; (b)範例二

  5. 當使用者點選灰階轉換功能按鈕時,彩色影像將轉換成灰階影像,並顯示於右側,如圖四所示。
  6. (a)

    (b)

    圖四、灰階轉換結果示意圖: (a)範例一; (b)範例二

  7. 當使用者點選邊緣偵測按鈕功能時,彩色影像將轉換成邊緣偵測後的影像,並顯示於右側,如圖五所示。
  8. (a)

    (b)

    圖五、邊緣偵測結果示意圖: (a)範例一; (b)範例二

  9. 使用者在操作動作 3 及動作 4 後,可依照需求,點選儲存按鈕,儲存當前轉換後的影像(灰階或邊緣影像),其可自由地命名及儲存不同影像格式(jpg, png, tif, bmp),如圖六所示。
  10. (a)

    (b)

    圖六、儲存影像示意圖: (a)範例一; (b)範例二



     程式碼下載