2019年4月3日 星期三

1051522 作業2

一. 題目
    撰寫一個程式,讀取一張256 色灰階圖像或 RGB 全彩圖像(.bmp 或.jpg 圖像格式都可) ,利用Sobel Operators 偵測圖像邊緣,並以邊緣偵測為基礎(如彩色圖像針可先將圖片 由 RGB 轉換至HIS 或 YUV, YCbCr 等色彩空間,只需對亮度 Channel I 或 Y 處理,再 轉回 RGB 即可),設計一個類似素描線條自畫像程式。(如果可以分析邊緣偵測所得到 的點,結合成線條方式呈現更佳!)

二. 環境
    - Windows 10
    - Visual Studio 2017 C# with EmguCV 3.4.3 (Nuget)

    (EmguCV為OpenCV在.Net平台上的包裝套件,C#可直接新增專案利用Nuget套件管理來快速安裝EmguCV,缺點就是新專案都要重新安裝一次)

三. 程式說明
    這次使用3.X所推薦的Mat存取方式來對圖像操作,相關的函數都包裝在CvInvoke class底下,用法跟C++的方式極為相似。

    求邊緣是影像辨識重要的一步,先求出需要辨識的物體範圍後,在做後續的動作就能不必理會不需要的圖像資訊、還能縮小範圍加快運算速度。


    這次作業要求用Sobel運算子來求邊緣,程式裡提供的三個方式來做比較,分別為:

    - Sobel_1: 直接對圖片做Sobel運算,求出X和Y的導數後和合併來求邊緣

    - Sobel_2: 先將圖片轉成Hls顏色空間,利用split取出亮度的channel,然後只對亮度做Sobel運算,之後再將做完的channel合併回去,在轉回RGB顏色空間

    - Sobel_3: 大致與Sobel_2操作一樣,但最後會跟原圖做AND運算,所以最後的圖是(Sobel_2 AND 原圖)之後的成果

    官方API文件說明可參考: Here

四. 程式結果 (程式有提供比較原圖功能)





Fig1~4. 分別為原圖、Sobel_1、Sobel_2、Sobel_3的結果







Fig5~8. 分別為原圖、Sobel_1、Sobel_2、Sobel_3的結果

沒有留言:

張貼留言