s1091707 作業2

  作業說明:

線條自畫像 (二值化與邊緣偵測 Image Thresholding and Edge Detection) 撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE) (a)利用 Sobel Operators 偵測並輸出邊緣成分圖 (b)設計一個類似素描線條的自畫像圖案。(想想:如何使用邊緣偵測所得到的點,結合 成看似素描筆畫出的線條?)

執行環境:

  • windows11
  • Opencv 4.6.0
  • Python 3.10.2
  • Vscode
實作方法:
  • (A)利用 Sobel Operators 偵測並輸出邊緣成分圖:
    1. 首先,用imread函式並指定grayscale讀入灰階圖片,並使用高斯模糊函數,模糊化圖片,因為模糊化可以平滑邊緣附近的強度變化,使更容易識別圖像中的主要邊緣結構,在此我使用kernel為3*3大小。




    2. 再來,用sobel函式進行梯度計算,分別給予5種參數,'來源影像', 'dx(針對x軸抓取邊緣)',dy(針對y軸抓取邊緣),ddepth 輸出影像深度,ksize 運算區域大小,對灰階照片進行偵測邊緣的轉換。在第二個參數我將輸出圖片每個像素儲存的值設為64bit,因為Sobel函數求完導數後會有負值以及大於255的值, 而原圖像大小範圍只有0~255,如不更改會有截斷, 因此要更改數據類型,



    3. 再用convertScaleAbs先將剛才圖像中有負數的部分做絕對值,再將64bit圖像輸出為8bit圖像,因為只有當圖像為8bit,imsohw才會按原圖像數據顯示。使用此function只需要傳入剛才計算好的圖片檔。

    4. 最後將對兩軸計算後的相片做合成,在此使用addWeighted函式
  • (B)設計一個類似素描線條的自畫像圖案:
     
    1. 首先,用二值化函數將一些主要邊緣以外的淺色線條轉為黑色,讓整體圖像更清晰,在此我使用thresh_tozero,將低於閥值60的都轉為0也就是黑色。再使用thresh_trunc將線條太白的部分轉為稍淡,在此設定大於閥值150的都轉為200,讓相片更像素描畫。



    2. 最後再做黑白色反轉,在此我直接用255對矩陣圖像相減,即可達到效果

執行結果:
功能(a)成品圖:

功能(b)成品圖:








留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1081444 Homework #7