s1081423 作業2
一、作業說明
撰寫一個程式,以灰階模式讀取一張圖像 imread(path,
IMREAD_GRAYSCALE)
(a) 利用Sobel Operators 偵測並輸出邊緣成分圖
(b) 設計一個類似素描線條的自畫像圖案。
二、程式功能
(1) 輸出原圖之灰度圖
(2) 利用Sobel Operators 偵測並輸出邊緣成分圖
(3) 輸出素描線條的自畫像圖案
三、開發環境
Windows 10 + Visual Studio 2022 + OpenCV
4.7.0
四、實作討論
1.高斯模糊去噪
利用高斯濾波器(Gaussian Filter)和原圖進行卷積來達成圖像平滑化,其中高斯濾波器使用高斯分布作為卷積核的權重分配表,會將離中央pixel越近的pixel賦予越大的權重,即把一個點的pixel值用它周圍的pixel值的加權平均代替。
(左)高斯分布 (右)二維高斯曲面公式
此例子中使用cv::GaussianBlur(),採用3x3大小的高斯濾波器處理。
2. Sobel邊緣偵測
邊緣檢測採用的方法是基於像素灰階的局部變化,通常是使用微積分的一階導函數進行影像濾波,求影像梯度再透過的過程,選取影像梯度較大者。其中Sobel算子是由一個3x3的矩陣組成,其中包含了兩個方向的運算子(水平和垂直)。這些運算子通過應用卷積運算來計算每個像素周圍的梯度值,可以用來識別邊緣。
(左) 垂直方向3x3一階核 (右) 水平方向3x3一階核
此段程式碼採用cv::Sobel()實現,先分別針對x軸與y軸方向處理,經過convertScaleAbs()轉回影像儲存格式uint8(0~255),並且執行addWeighted()將兩圖加權平均合併出邊緣影像。
3.素描線條畫像
作法一 : 採用threshold()將小於70之像素過濾,將灰度圖轉換為二值圖,並將此二值圖與邊緣灰度圖都執行bitwise_not()使黑白相反,將獲得的兩種影像以1:9的比例相加,獲得更加接近素描風格之圖像。
留言
張貼留言