2021年3月26日 星期五

s1061460 影像處理作業 2

 作業說明:

線條自畫像
(二值化與邊緣偵測應用Extension of Thresholding and Edge Detection)

            撰寫一個程式,讀取一張256色灰階圖像或RGB全彩圖像(.bmp.jpg圖像格式都可,如全彩圖像可先將圖片由RGB轉換至灰階影像),利用Sobel Operators圖像邊緣為基礎,設計一個類似素描線條自畫像程式。(如果可以分析邊緣偵測所得到的點,結合成線條方式呈現更佳!)


操作環境:

l  作業系統 :  Windows10

l  編譯軟體 :  Visual Studio Code

l  使用語言 :  Python / OpenCV 4.5.1


實作方法:

1. 運用OpenCV提供之讀取圖片檔函數cv2.imread將圖片讀取進來。

2. 將原本的影像轉為灰階影像再做邊緣偵測。

3. Sobel Edge Detection分成verticalhorizontal兩種方式取值。

l   將每個pixel值的取法是以該pixel為中心點,向外推出去九宮格範圍的pixel來做運算取得該pixel的值。

l   vertical是把九宮格內的每個pixel乘上相對應的九宮格vertical sobel mask後加總成為該pixel的新值,以算出垂直梯度Gx的邊緣偵測。

l   horizontal是把九宮格內的每個pixel乘上相對應的九宮horizontal sobel mask後加總成為該pixel的新值,以算出水平梯度Gy的邊緣偵測。

l   通過cv2.Sobel()計算出X,Y方向的梯度大小

4. 邊緣偵測所得到的點,進行顏色反轉。讀取每個圖元值P,再將255-P寫入新的圖片中;對於灰度圖,只有一個通道,所以 img2[i,j] = (255-image[i,j]) ;對於彩色圖片,則要RGB值分別做處理,255-image[i,j][0],255-image[i,j][1],255-image[i,j][2]

5. 設定threshold讓圖片二值化,讓線條明顯呈現以達成類似素描效果。

6. 使用 OpenCV 所提供的 cv2.imshow 來顯示原圖、灰階、Sobel x方向處理、Sobel y方向處理、Sobel xy方向combine以及顏色反轉,最後將影像二值化呈現類似素描結果。


執行結果:

                                    原圖:

                                   轉為灰階:

                                  Sobel x方向處理:

                                  Sobel y方向處理:

                                  Sobel xy方向combine

                                  顏色反轉,呈現黑線條:

                                  設定threshold讓圖片二值化,達成類似素描效果:

沒有留言:

張貼留言