s1061637 作業2

 

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

 

作業要求:

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

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

(b)設計一個類似素描線條的自畫像圖案。











開發環境:

Jupyter Notebook+Python 3.10.10+ win10

作業步驟說明:

 

(a) 輸出邊緣成分圖

(1)   cv2.imread("fig.jpg", cv2.IMREAD_GRAYSCALE)
匯入需要的圖片並轉成灰階

(2)   cv2.medianBlur(fig, 7)

將圖片進行模糊對圖片,去除圖像中的噪聲,以中位數取代鄰近像素的值。7是指選擇7x7作為判斷範圍,數字越大,效果越模糊。

(3)   cv2.Sobel(img, cv2.CV_16S, 1, 0, ksize = 3)

使用Sobel運算子來偵測邊緣,計算x y方向上的梯度,使用 16 可避免 overflow 問題

 

(4)   edg = np.uint8(np.clip(abs(grad_x) + abs(grad_y), 0, 255))

grad_x, grad_y取絕對值再相加,並限制在0~255之間,轉換為uint8型別的數據

(b)素描圖

l   中心想法inverted->blur->inv_blur->divide

 

顏色反轉使圖中物體變黑背景變白,以找到圖像中的邊緣訊息。接著對反轉後的圖像進行高斯模糊平滑,減少噪聲和細節,使邊緣信息更加突出。最後,對平滑後的圖像進行除算,得到一個灰度值較低的圖像,得到圖像的骨架信息。

 

 

 

Ref: Pencil Sketch with Python | Aman Kharwal (thecleverprogrammer.com)

留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1061637 作業6