s1093304 作業2

 

一、作業說明

主題: 線條自畫像 (二值化與邊緣偵測 Image Thresholding and Edge Detection) 

撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE) 

(a)利用 Sobel Operators 偵測並輸出邊緣成分圖 

(b)設計一個類似素描線條的自畫像圖案。(想想:如何使用邊緣偵測所得到的點,結合成看似素描筆畫出的線條?)

圖一、本次作業讀取的圖片

二、開發環境

  • Windows 10
  • Visual Studio Code 1.76.1
  • Python 3.9.15
  • OpenCV 4.6.0

三、實作過程

  • 首先使用cv2.imread('./fig.jpg', cv2.IMREAD_GRAYSCALE),以灰階方式讀取圖像。
  • 圖二、以灰階方式讀取圖片

  • (a) 利用 Sobel Operators 偵測並輸出邊緣成分圖:
    • 如下圖三,使用cv2.Sobel()對img圖像進行邊緣檢測,輸出的影像深度為16位元的有符號整數,分別在x和y軸方向計算梯度,Sobel算子的核大小為3*3。
圖三、使用cv2.Sobel()
    • 使用cv2.convertScaleAbs()分別將sobel_x和sobel_y轉成8位元的絕對值影像
    • 接著使用cv2.addWeighted()將已轉成絕對值的sobel_x和sobel_y各自加權0.5後疊加,即可得到邊緣成分圖(sobel_pic)。
    • 圖四、邊緣成分圖(sobel_pic)

  • (b)設計一個類似素描線條的自畫像圖案:
    • 使用cv2.GaussianBlur()對sobel_pic進行模糊化處理,使用大小為3*3的高斯濾波器。
    • 對經過模糊化處理的圖片透過cv2.threshold()進行二值化處理,得到threshold_pic
    • 藉由255 - sobel_pic和255 - threshold_pic得到sobel_pic和threshold_pic的反色圖
    • 最後再透過cv2.addWeighted()將sobel_pic和threshold_pic的反色圖各自加權0.5後疊加,即可獲得一個類似素描線條的自畫像圖案。
    • 圖五、類似素描線條的自畫像圖案

留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1091537 Homework #1