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)
留言
張貼留言