2019年4月13日 星期六

s1042701的作業1


題目
撰寫一個程式從檔案讀取一張圖像,將圖像的每一個點像素的值各加上一個整數值 v (-255 <= v <= 255),並將圖像儲存至一個新圖像檔案中。

1. 實作方法

利用 imread() 來讀取彩色圖檔或灰階圖檔
接著在每一個點像素加上輸入值再加上beta值後對像素進行計算
若彩色圖檔使用 .at<Vev3b>  灰階使用 .at<uchar> 
並利用 saturate_cast 來避免修改後的值不會溢位
最後用 imwrite() 儲存圖像。

2. 執行環境

Visual studio 2017 + OpenCV 3.4

3. 執行結果







2019年4月9日 星期二

1051424 作業2


一、 題目
 撰寫一個程式,讀取一張 256 色灰階圖像或 RGB 全彩圖像(.bmp .jpg 圖像格式都可) ,利用 Sobel Operators 偵測圖像邊緣,並以邊緣偵測為基礎(如彩色圖像針可先將圖片 由 RGB 轉換至 HIS YUV, YCbCr 等色彩空間,只需對亮度 Channel I Y 處理,再 轉回 RGB 即可),設計一個類似素描線條自畫像程式。(如果可以分析邊緣偵測所得到 的點,結合成線條方式呈現更佳!)
二、 環境
1.     Windows 10
2.     Python 3.7.1
3.     Opencv 3.4.5
三、 實作
1.    輸入當前路徑下指定圖片的名稱 (ex. Input.jpg)
2.    使用cv2.imread() 讀取圖片,其名為s1051424_img.jpg並使用cv2.imshow()顯示原圖
3.    使用cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 專為灰階圖並使用cv2.imshow()秀出此圖
4.         cv2.Sobel(image,cv2.CV_16S,1,0)cv2.Sobel(image,cv2.CV_16S,0,1)轉出圖片在x軸和y軸的16位元數據以防因有負數導致建立圖像时長度不够
5.         cv2.convertScaleAbs(sobelX)取絕對值轉回uint8形式顯示圖片
6.         使用cv2.imshow()秀出結果圖並使用cv2.imwrite() 存取改變後的圖片,命名為s1051424_output.jpg
四、 執行
1.      終端機到檔案所在路徑
2.      python s1051424_hw2.py
3.      輸入當前路徑下指定圖片的名稱 (ex. Input.jpg)
4.      結果
五、 結果

Origin

Grayscale

Edge Detection and Contour Drawing

2019年4月7日 星期日

1051547作業2

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

二、開發環境
window 10、visual studio 2017、openCV 3.4.5

、實作方法
sobel測出圖像邊緣
cvtcolor 轉換成灰階圖像
addweighted 合併圖像
covertscaleabs將圖轉回rgb

四、實作結果

2019年4月6日 星期六

1041657 作業2

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

二、開發環境
windowsvisual studioC++openCV

三、實作方法
使用Imread_grayscale直接讀取灰階影像
將圖片使用Gaussian Blur平滑處理減少雜訊
進行Sobel得到Sobel_xSobel_y
使用ConvertScaleAbs計算各輸入圖像素,並將結果轉為8位元圖

使用AddWeightedthreshold將圖片效果最佳化


四、結果

2019年4月5日 星期五

s1051771 作業二

作業2邊緣偵測與製作線條自畫像

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


一.原理

将原图像与一个大小为3的内核进行水平方向和垂直方向的卷积然后再求出近似梯度


二.实现

<1>sobel

C++: void Sobel (InputArray src,OutputArray dst,int ddepth,int dx,int dy, int ksize=3,double scale=1,double delta=0,int borderType=BORDER_DEFAULT );
    第一个参数,InputArray 类型的src,为输入图像,填Mat类型即可。
    第二个参数,OutputArray类型的dst,即目标图像,函数的输出参数,需要和源图片有一样的尺寸和类型。
    第三个参数,int类型的ddepth,输出图像的深度,支持如下src.depth()和ddepth的组合:

        若src.depth() = CV_8U, 取ddepth =-1/CV_16S/CV_32F/CV_64F
        若src.depth() = CV_16U/CV_16S, 取ddepth =-1/CV_32F/CV_64F
        若src.depth() = CV_32F, 取ddepth =-1/CV_32F/CV_64F
        若src.depth() = CV_64F, 取ddepth = -1/CV_64F

    第四个参数,int类型dx,x 方向上的差分阶数。
    第五个参数,int类型dy,y方向上的差分阶数。
    第六个参数,int类型ksize,有默认值3,表示Sobel核的大小;必须取1,3,5或7。
    第七个参数,double类型的scale,计算导数值时可选的缩放因子,默认值是1,表示默认情况下是没有应用缩放的。
    第八个参数,double类型的delta,表示在结果存入目标图(第二个参数dst)之前可选的delta值,有默认值0。
    第九个参数, int类型的borderType,边界模式,默认值为BORDER_DEFAULT。
(取自CSDN)

<2>图像转换

cvtColor(src,dst,COLOR_BGR2GRAY);

将原RGB图像转换为灰阶图像

<3>运行

作業2邊緣偵測與製作線條自畫像

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


一.原理

将原图像与一个大小为3的内核进行水平方向和垂直方向的卷积然后再求出近似梯度


二.实现

<1>sobel

C++: void Sobel (InputArray src,OutputArray dst,int ddepth,int dx,int dy, int ksize=3,double scale=1,double delta=0,int borderType=BORDER_DEFAULT );
    第一个参数,InputArray 类型的src,为输入图像,填Mat类型即可。
    第二个参数,OutputArray类型的dst,即目标图像,函数的输出参数,需要和源图片有一样的尺寸和类型。
    第三个参数,int类型的ddepth,输出图像的深度,支持如下src.depth()和ddepth的组合:

        若src.depth() = CV_8U, 取ddepth =-1/CV_16S/CV_32F/CV_64F
        若src.depth() = CV_16U/CV_16S, 取ddepth =-1/CV_32F/CV_64F
        若src.depth() = CV_32F, 取ddepth =-1/CV_32F/CV_64F
        若src.depth() = CV_64F, 取ddepth = -1/CV_64F

    第四个参数,int类型dx,x 方向上的差分阶数。
    第五个参数,int类型dy,y方向上的差分阶数。
    第六个参数,int类型ksize,有默认值3,表示Sobel核的大小;必须取1,3,5或7。
    第七个参数,double类型的scale,计算导数值时可选的缩放因子,默认值是1,表示默认情况下是没有应用缩放的。
    第八个参数,double类型的delta,表示在结果存入目标图(第二个参数dst)之前可选的delta值,有默认值0。
    第九个参数, int类型的borderType,边界模式,默认值为BORDER_DEFAULT。
(取自CSDN)

<2>图像转换

cvtColor(src,dst,COLOR_BGR2GRAY);

将原RGB图像转换为灰阶图像

<3>运行

2019年4月4日 星期四

s1061455 的作業 2

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

二、操作环境
        Windors10+python3+opencv

三、实作方法
        1.使用imread()方法读取灰阶图片。
        2.调用opencv中Sobel算子的函数cv2.sobel(),求出X,Y两个方向的结果

        3.最后通过cv2.addWeighted()方法进行处理

1051536 hw2

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



二、作業環境:


windows 10
visual studio 2017
opencv 3.4

三、執行方式:
讀入圖檔
高斯平滑(GaussianBlur)去除雜訊
Sobel分別計算x、y軸進行運算得到像素的梯度
(避免saturate,所以通常輸入圖的深度為CV_8U,輸出圖深度使用CV_16S)
convertScaleAbs()把圖像轉回CV_8U
addWeighted()將垂直及水平分配權重並結合成最後的線條圖


四、執行畫面:

原圖

sobel

scharr

2019年4月3日 星期三

s1051416 的作業2

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

實作方式:

讀入圖檔後先做色彩空間轉換BGR to YCrCb
只取Channel I做處理
接著利用 Sobel Operators 偵測圖像邊緣
先後求得X與Y的梯度
合併梯度
設定閥值

作業環境
windows10, visual studio 2017, opencv3.4.4

實作結果

只取Channel I

偵測邊緣 閥值為80

偵測邊緣 閥值為255

從YCrCb轉換為BGR

1041450 作業2

一、作業說明

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

二、開發環境

    MacOS 10.14.3
    Xcode 10.2
    OpenCV 3.4

三、實作方法

    1. 利用cvtColor將BGR的圖轉換為灰階的圖
    2. 利用blur函式將圖片稍微模糊
    3. 使用Sobel算子找出邊緣
    4. 使用addWeightedSobel算出的x y做合併

四、結果

    

1051432 作業二

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


二、作業環境:

  • windows10
  • visual studio 2017  
  • opencv 3.4.1


三、程式片段:

  • cvtColor():先將BGR轉成YCrCb
  • split():將Y、Cr、Cb進行切割,再將Y取出來進行運算
  • Sobel():分別找出對X微分及對Y微分後的輪廓
  • convertScaleAbs():將圖片的像素深度轉換為CV_8U
  • GaussianBlur():去除雜訊
  • addWeighted():將對X及對Y微分的圖片相加
  • threshold():設定閥值,閥值以下設為零
四、成果展示:
  • img0為原圖
  • img1為Y值的圖
  • img2為轉換為RGB後的圖


1041506 作業2

一、簡介:

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

二、環境
  1.
Visual  Studio  2017
  2.OpenCV 3.4.5

三、作業解釋
  1. 使用imread讀取圖片
  2. 根據彩色or灰階判斷是否轉灰階
  3. 用Y=0.299*rgbRed+0.587* rgbGreen+0.114*rgbBlue公式,將BGR轉為gray
  4. 用Spatial Convolution將圖片做處理(SOBEL)
  5. 轉回rgb
  6. 最後用imwrite將圖片輸出存成圖片檔。
  
四、圖示
原圖
灰階處理後
邊緣處理後
255-原值
改成白底黑線
用Canny函數產生邊緣線條



1051404 作業二

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

2. 環境:
VS2015
opencv 2.4.13

3. 作業解說:
(1) 先使用imread(GRAYSCALE)讀取灰階圖像:
      Mat src = imread("1.jpg", CV_LOAD_IMAGE_GRAYSCALE);
(2) 利用Sobel這個function分別讀取兩次 (X軸,Y軸方向各一次) 去分析出圖片的edge
(3) 使用模糊,GaussianBlur()這個function來消除edge以外的一些圖片雜訊
(4) 使用addWeighted()將兩個(X軸,Y軸)分析出edge的圖像組合在一起
(5) 最後我使用threshold(),以值80做為界線,將圖片的顏色區分為0和255。

1041548 作業2

一、作業題目:

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

二、環境:

windows10 
Visual Studio 2017
OpenCV 4.0


三、作業流程:

1.讀取圖片並轉換為灰階

2.利用GaussianBlurb將圖片平滑化

3.使用sobel function 找到x軸與y軸的階梯度

4.
將結果x和y向量的圖片addweight

5.將黑白反轉後將圖檔轉回RGB

6.輸出結果

原圖->灰階+平滑化 

黑白反轉後結果

1041508 作業2

一、作業題目:

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

二、環境:

windows10 
Visual Studio 2013
OpenCV 2.4.13

三、作業流程:

1.輸入讀取檔案的位置

2
.讀取圖片並轉換為灰階

3
.利用GaussianBlurb減少圖片雜訊

4
.使用sobel function 找到x軸與y軸的階梯度

5
.最後把兩個階梯度相加使圖片水平與吹直部分邊緣化

5. 輸出結果

三、結果: