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的結果

s1051670的作业2

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

二.作业环境
1.ubuntu 18.04
2.pycharm 2019
3.opencv 4.0.0

三.作业说明
sobel算子其实是一种过滤器,是带有方向的,其函数大致是这样
dst = cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]])

参数一:处理的图像
参数二:图像的深度
dx,dy是求导的阶数,一般是0,1,2

sobel函数求完导数后会有负值,还有会大于255.而原图像是unit8,所以sobel建立的图像位数不够,会有截断。
因此要用16位有符号的数据类型,cv2.CV_16S。再用convertScaleAbs()转回unit8。

四.作业结果



1043340的作業2

一、作業要求


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



二、使用環境

  • windows10
  • Visual Studio 2013
  • OpenCV 2.4.13

三、實作方法

  1. 使用imread讀檔並傳成灰階
  2. 利用 bilateralFilter將圖卡通化
  3. 使用Sobel分別從X和Y方向做處理,再將兩個結果用addWeighted合併
  4. 過濾不夠明顯的線條得到最終的線稿
  5. 利用addWeighted結合卡通化過的圖片和線稿







s1051530的作業2

一、作業題目

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

二、環境設置

  1. windows 10
  2. visual studio 2017
  3. opencv 3.4.0
三、作業說明
  1. 利用imread讀入影像
  2. 創建一個track bar控制sobel kernel參數值,參數值0~4對應kernel值為1、3、5、7
  3. 利用sobel函式求出x和y方向的個別梯度
  4. 求出梯度後用convertScaleAbs函式轉為八位元
  5. 利用addWeighted函式將x、y方向梯度合併
  6. 輸出效果圖

四、執行結果

原圖

參數值為1->kernel值為3

kernel值為3效果圖
參數值為0->kernel值為1
kernel值為1效果圖

1043310的作業二


一、作業目的

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


二. 系統環境

Opencv 3.4.1, Visual Studio 2017,  Windows 8.1

三. 操作方法

1. 讀取圖片,並將圖片轉成ycbcr格式,公式為: Y = 0.257*R + 0.564*G + 0.098*B + 16;
2. 將數值存入Mat中,並只提取y值一個channel即可

3. 接下來使用Sobel算子,分別對該圖的x和y向量提取邊緣
4. 將結果x和y向量的圖片addweight,結合起來
5. 因題目為"素描",所以將黑跟白反轉後輸出結果

四. 結果

 

s1051437_HW2

一、作業題目:

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


二、環境設置:
  1. Visual Studio 2017
  2. opencv 3.4.5


三、作業說明:
  1. 輸入欲調整的檔案名稱
  2. 透過imread讀取
  3. 透過Sobel convertScaleAbs儲存XY
  4. 利用addWeighted合併XY
  5. 對threshold進行邊緣化
  6. 透過imshow顯示

四、結果展示:



s1051518 的作業 2

一、實作方法:
用Sobel()找x軸跟y軸的邊緣,再對值做處理後,x軸邊緣的圖跟y軸邊緣的圖做合併。

二、執行環境:
c++、opencv 4.0.1、windows 10、Visual Studio 2017

三、執行方式:
輸入要開啟的圖片檔名或絕對路徑(只輸入檔名時圖片要放在同資料夾底下),圖片不存在或路徑錯誤叫你重打,最後關閉視窗後自動存為out.jpg。

四、執行畫面:


輸入圖片檔名或是絕對路徑:
























關閉後自動存為out.jpg