2022年3月24日 星期四

s1081535 作業3

  

一、 作業說明 

線條自畫像 (二值化與邊緣偵測

以灰階模式讀取一張圖像利用 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_Y

Sobel_XY(使用addWeight()疊加)


Sobel_XY(使用Sobel()函式

顏色反轉

影像二值化(使用Binary Type)


影像二值化(使用Tozero Type)





Canny邊緣偵測

Canny邊緣偵測+顏色反轉





沒有留言:

張貼留言