一、 作業說明
以灰階模式讀取一張圖像,利用 Sobel Operators 偵測並輸出邊緣成分圖,並設計一個類似素描線條的自畫像圖案。
二、 作業環境
- MacOS Monterey 12.2
- PyCharm 2019.3.3
- Python 3.8
- OpenCV 4.5.5
三、 實作功能與方法
減少雜訊和平滑圖像
使用GaussianBlur('圖像名稱', Filter_Size, 0)高斯綠波函式將圖片進行濾波操作(平滑、過濾以及去噪);Filter_Size為3x3。
邊緣偵測
以Sobel Operator索伯算子,分別以水平及垂方向取值,計算出邊緣像素。取值方式為以該Pixel為中心點,九宮格範圍內之其餘八個Pixel值做運算取得其Pixel值。
- 垂直取法是把九宮格內的每個Pixel乘上相對應的九宮格Vertical Sobel Mask後加總成為該Pixel的新值,以算出垂直梯度Gx的邊緣偵測。
- 水平取法是把九宮格內的每個pixel乘上相對應的九宮Horizontal Sobel Mask後加總成為該Pixel的新值,以算出水平梯度Gy的邊緣偵測。
使用cv2.Sobel('圖像名稱', 圖像深度, dx, dy, Filter_Size),計算出X(垂直)與Y(水平)方向的梯度大小。
合併特徵圖
利用addWeighted()合併X和Y方向的梯度計算結果圖,得到輸出邊緣成分圖。
顏色反轉
邊緣偵測所得到的點,進行顏色反轉。讀取每個圖元值P,再將255-P寫入新的空白陣列中,得到顏色反轉圖。
影像二值化
設定cv2.threshold('圖片名稱', Thresh_Value, Maxval_Value, 處理方法),讓線條明顯呈現以達成類似素描效果。
Canny邊緣偵測
使用cv2.canny('圖片名稱', minVal, MaxVal)。Canny演算法是一個複合性的邊緣偵測演算法,結合了Gaussian Filter、梯度偵測、非最大值抑制、判斷邊界四個演算法去實踐邊緣偵測。
四、 執行結果
原圖
Sobel_X
Sobel_XY(使用addWeight()疊加)
Sobel_XY(使用Sobel()函式)
顏色反轉
影像二值化(使用Binary Type)
影像二值化(使用Tozero Type)
Canny邊緣偵測