2019年4月1日 星期一

s1053314 的作業 2

一、作業要求

邊緣偵測與製作線條自畫像撰寫一個程式,讀取一張 256 色灰階圖像或 RGB 全彩圖像(.bmp 或.jpg 圖像格式都可) ,利用 Sobel Operators 偵測圖像邊緣,並以邊緣偵測為基礎(如彩色圖像針可先將圖片 由 RGB 轉換至 HIS 或 YUV, YCbCr 等色彩空間,只需對亮度 Channel I 或 Y 處理,再 轉回 RGB 即可),設計一個類似素描線條自畫像程式。


二、原理


去雜訊:利用高斯函數得到高斯濾波的各個參數

紀錄梯像素梯度方向與強度:以Sobel運算子計算水平和垂直梯度(Gx,Gy),兩者平方後相加得到梯度強度(G)

非最大抑制:採用梯度找邊緣,邊緣會比較模糊,這方法讓邊緣定位較精確,比較每個像素,當這個像素的梯度強度最大就保留此像素的值,否則設成0


判斷邊界:依據輸入的上下兩個閾值判斷此像素是否為邊緣,下列三種判斷依據,
  • 此像素梯度強度大於上閾值,此像素為邊緣
  • 此像素梯度強度小於下閾值,此像素不為邊緣
  • 此像素梯度強度介於上下閾值,若此像素周圍,有像素的梯度強度大於上閾值,則此像素為邊緣,否則不為邊緣


三、使用環境/語言

  • Windows 10
  • Spyder 
  • Python 3.7.1
  • Opencv 3.4.1


    四、特殊程式片段註解

    • cvtColor //以BGR顏色空間轉換到灰度空間
    • GaussianBlur //用來去除雜訊
    • Canny //抗雜訊及精確定位有較好的效果
    • hstack //將原圖與調整過的圖水平方向堆疊起來
    • createTrackbar //建立滑動條調整閾值大小
    • imwrite //將照片寫入路徑上存放

    五、環境設置

    • 將Anaconda的路徑加入的path
    • 於Anaconda cloud server中搜尋package(cmd輸入:anaconda search opencv)
    • 挑選一個符合系統的package(cmd輸入:conda install -c https://conda.anaconda.org/package名稱)
    • 下載完畢後,開啟Spyder執行程式

    六、執行結果

    • 閾值=0

    • 閾值=11
    • 閾值=38
    • 閾值=70
    • 閾值=100
    • 儲存圖片(dog copy)

    七、影片連結
    • https://youtu.be/qLNZ2wYlpO0
    八、參考資料
    • http://monkeycoding.com/?tag=canny





    沒有留言:

    張貼留言