s1081423 作業2

 一、作業說明

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

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

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


二、程式功能

(1) 輸出原圖之灰度圖

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

(3) 輸出素描線條的自畫像圖案


 左至右 : (1)(2)(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的比例相加,獲得更加接近素描風格之圖像。


 作法二 : 將原圖之灰度圖與高斯模糊圖進行divide(),即可獲得接近素描風格之影像。



留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1081444 Homework #7