一、作業題目
撰寫一個程式,讀取一張256 色灰階圖像或 RGB 全彩圖像(.bmp 或.jpg 圖像格式都可) ,利用Sobel Operators 偵測圖像邊緣,並以邊緣偵測為基礎(如彩色圖像針可先將圖片 由 RGB 轉換至HIS 或 YUV, YCbCr 等色彩空間,只需對亮度 Channel I 或 Y 處理,再 轉回 RGB 即可),設計一個類似素描線條自畫像程式。(如果可以分析邊緣偵測所得到 的點,結合成線條方式呈現更佳!)
二、執行環境
1. python 3.6
2. opencv 4.0.0.21
3. PyQt5
4. Windows
2. opencv 4.0.0.21
3. PyQt5
4. Windows
三、程式功能
基本功能:
能讀取圖片,並偵測圖像邊緣。特殊功能:
本程式有三種模式邊緣偵測模式,供使用者選擇,分別為Laplacian、Sobel與Canny,同時,可將偵測完成的圖片進行儲存覆蓋或另存新檔。
四、實作方法
使用PyQt建立介面,並將圖片等比例縮放,在介面上以QPixmap形式,做出適當大小的呈現,使用者可依據個人需求,選擇邊緣偵測模式。
Laplacian:
二階微分導數,利用其零交叉性質,進行邊緣定位,對noise較敏感。先將圖片轉為灰階後,使用GaussianBlur進行平滑處理,減少雜訊後,再進行Laplacian轉換,最後以convertScaleAbs將圖片轉換為CV_8U型態,實作成果之輪廓描繪較不明顯。
Sobel:
離散型差分運算,距離不同的像素具有不同權重。先將圖片轉為灰階後,使用GaussianBlur進行平滑處理,減少雜訊後,分別對X軸方向與Y軸方向,進行Sobel運算,得到像素梯度,並綜合其結果,最後以convertScaleAbs將圖片轉換為CV_8U型態,實作成果之輪廓邊緣較Laplacian明顯,但相對雜訊較多。
Canny:
一階偏導有限差分運算,具有濾波、增強、檢測等功能。先將圖片轉為灰階後,使用GaussianBlur進行平滑處理,減少雜訊後,再進行Canny運算,最後以convertScaleAbs將圖片轉換為CV_8U型態,實作成果之輪廓明顯且雜訊少。
五、執行結果
初始介面。
點擊選擇圖片,可選擇自己想要的圖片。
選擇彩圖(test1),左上角Status部分顯示當前圖片狀態,Original(RGB)。
點擊Laplacian,將圖片以Laplacian運算進行邊緣偵測,左上角Status部份顯示當前圖片狀態,Laplacian。其實作效果可看到,邊緣輪廓線段連結不太明顯。
點擊Sobel,將圖片以Sobel運算進行邊緣偵測,左上角Status部分顯示當前圖片狀態,Sobel。其實作結果可看到,邊緣輪廓較Laplacian明顯,但雜訊也相對較多。
點擊Canny,將圖片以Canny運算進行邊緣偵測,左上角Status部分顯示當前圖片狀態,Canny。其實作結果可看到,相較Laplacian與Sobel來說,邊緣輪廓清晰,且雜訊較少。
點擊儲存,能直接覆蓋該檔案,進行儲存。
選擇灰階圖(test2),左上角Status部分顯示當前圖片狀態,Original(Gray)。
點擊Laplacian,將圖片以Laplacian運算進行邊緣偵測,左上角Status部分顯示當前圖片狀態,Laplacian。其實作結果可看到,部分邊緣輪廓線段連結不太明顯。
點擊Sobel,將圖片以Sobel運算進行邊緣偵測,左上角Status部分顯示當前圖片狀態,Sobel。其實作結果可看到,邊緣輪廓較Laplacian明顯,但雜訊也相對較多。
點擊Canny,將圖片以Canny運算進行邊緣偵測,左上角Status部分顯示當前圖片狀態,Canny。其實作結果可看到,相較Laplacian與Sobel來說,邊緣輪廓清晰,且雜訊較少。
點擊另存新檔,可將圖片另存為新檔案(另存)。
沒有留言:
張貼留言