發表文章

目前顯示的是 3月, 2023的文章

s1083317 作業2

圖片
一、題目 : 線條自畫像 ( 二值化與邊緣偵測 Image Thresholding and Edge Detection) 撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE)   (a) 利用 Sobel Operators 偵測並輸出邊緣成分圖   (b) 設計一個類似素描線條的自畫像圖案。 ( 想想:如何使用邊緣偵測所得到的點,結合成看似素描筆畫出的線條 ?) 二、環境 : Windows 10 Visual Studio 2019( 語言 python) OpenCV 4.5.5.62 三、結果圖片 : (a) (b) 四、程式碼片段解釋  : 讀取圖片並灰階化 先做平滑處理再進行 sobel operation 比較過後我自己認為高斯平滑效果好於中值模糊處理 此即為 a 小題答案 而 b 小題答案是利用 threshold 將大於 threshold 的像素變白   反之 之後再用 not 反白就完成 b 小題了

s1083317 作業1

圖片
一、題目 : 圖像旋轉 (Image Rotation) 撰寫一個程式將一張圖像的 (a) 整張圖像 (b) 中心內切圓區域,旋轉一個角度 ( 逆時針旋 轉 0 度至 359 度 ) :利用一個滑動條 (trackbar) 控制旋轉角度。 二、環境 : Windows 10 Visual Studio 2019( 語言 python) OpenCV 4.5.5.62 三、程式碼  : 上圖為基本的初始化程式片段,只是 建立具有拉條的視窗後,執行 justPrint function          上圖為 justPrint function 的部份程式碼片段,主要是在建立 mask 首先先建立一張全黑畫布 ( 與 img 同高同寬的 0 矩陣 ) 並在中間畫一個白色的圓 (RGB 為 (255,255,255)) 即可以簡單建立一個 mask ,其矩陣數值如下示意圖所示 之後再利用 bit and mask 、 bit and ~mask 分別建立 img3 跟 img4 Img3: Img4: 最後在融合兩張圖並旋轉內部的圓就完成了 四、結果圖片 :

s1093705 作業二

圖片
線條自畫像 (二值化與邊緣偵測 Image Thresholding and Edge Detection) 題目說明: 撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE)      (a)利用Sobel Operators 偵測並輸出邊緣成分圖      (b)設計一個類似素描線條的自畫像圖案。 開發環境: Windows 11  Visual Studio Code Python 3.11.2  Opencv 4.7.0 實作結果: Sobel Operators 偵測邊緣圖 邊緣圖轉換成素描風格圖 不同技術轉換成出的素描風格圖 實作Demo: 程式說明: 本題利用 cv2.createTrackbar() 和 cv2.getTrackbarPos() 來控制以下變數,來尋找邊緣偵測的最佳參數: A:  用  cv2.threadhold() , 將圖形顏色較淡的地方,去除小於A 的值,A 以上的值維持不變。 B:用高斯分佈進行模糊化的計算,指定模糊區域單位 BxB。 C:用  cv2.threadhold()  ,去除小於 C 的值,C 以上的值維持不變,以達到 加強邊緣線的效果。 D: (a)利用Sobel Operators 偵測並輸出邊緣成分圖 1. 先將圖形顏色較淡的地方,用  cv2.threadhold() 去除,此例是去除小於A 的值,A 以上的值維持不變, 參數介紹: ( Reference ) v2.THRESH_BINARY 如果大於 A 就等於 255,反之等於 0。 cv2.THRESH_BINARY_INV 如果大於 A 就等於 0,反之等於 255。 cv2.THRESH_TRUNC 如果大於 A 就等於 127,反之數值不變。 cv2.THRESH_TOZERO 如果大於 A 數值不變,反之數值等於 0。 cv2.THRESH_TOZERO_INV 如果大於 A 等於 0,反之數值不變。     ret , image = cv2 . threshold ( image , A , 255, cv2 . THRESH_TOZERO )

s1093336 作業2

圖片
   一、作業說明 撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE) (a)利用 Sobel Operators 偵測並輸出邊緣成分圖 (b)設計一個類似素描線條的自畫像圖案。(想想:如何使用邊緣偵測所得到的點,結合 成看似素描筆畫出的線條?)  二、開發環境 OS: Windows 11 64bit Editor: Visual Studio 2019 Language: C++ Package: OpenCV-4.5.0    三、程式功能 執行方式 直接執行本程式 執行設定 查看執行結果 gradXY視窗為Sobel X與Sobel Y直接歷遍進行灰階值的疊加結果。 Pencil視窗為gradXY經過模擬素描後的結果。 Pencil gradXY  四、實作過程 整張圖像進行高斯濾波後轉化為灰階。 高斯濾波 灰階 利用Sobel Operator計算X梯度與Y梯度。 X梯度 Y梯度 歷遍X與Y梯度圖,將灰階值進行相加生成新的圖像。 歷遍疊加後產生的新圖,將灰階值30以下的轉換為255,並對其他的做abs(255-當前值),並對處理後值處於20以下的進行修正到160。

s1093302 作業二

圖片
主題: 線條自畫像 (二值化與邊緣偵測 Image Thresholding and Edge Detection)  撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE)  (a)利用 Sobel Operators 偵測並輸出邊緣成分圖 (b)設計一個類似素描線條的自畫像圖案。 開發環境: Windows10, Spyder, opencv 4.5.4, Python3.8 功能:先使用imread讀取圖片,跟上次不同的是在後面加入係數0,這樣就能得到灰階圖片 圖片(一)灰階圖片 接著,我們 可以用sobel opreater將圖片進行處理,分別取出X和Y方向的輪廓後接著使用 convertScaleAbs對擷取結果做絕對值,然後再用addWeighted將x方向和y方向的輪廓相加後得到灰階形式的邊緣成分圖   圖片(二) 邊緣成分圖 接著要取得類似素描線條的圖像的話,最直白的方法就是將 邊緣成分圖中黑白的部分顛倒後去除雜質干擾就行了       圖片(三) 類似素描線條的圖案

s1091541 作業2

圖片
  主題: 線條自畫像 (二值化與邊緣偵測 Image Thresholding and Edge Detection)  撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE) (a)利用 Sobel Operators 偵測並輸出邊緣成分圖 (b)設計一個類似素描線條的自畫像圖案。 開發環境: windows11 Opencv 4.7.0 Visual Studio 2022 C++ 程式碼說明: (a)利用 Sobel Operators 偵測並輸出邊緣成分圖 :  取得灰階模式圖像後,首先使用 GaussianBlur()函數進行降噪,在這裡我使用的kernal大小為3*3。                           套用Sobel函數,xdir與ydir是用於儲存Sobel濾波器應用後所產生的x與y方向的邊緣檢測結果的陣列,第四與第五個參數各代表x,y方向當x方向的參數為1則生成xdir反之亦如此。最後一個參數代表Sobel的kernal大小。 套用convertScaleAbs()函數,因為上一個步驟的結果有可能為負數,所以需要此函數除去符號以方便後續處理。 使用addWeighted()將xdir與ydir合併形成一張圖,再透過bitwise_not()將黑白反轉即可得到圖(一)。                                                                                                                                                                   圖(一)                                  (b)設計一個類似素描線條的自畫像圖案:     為了讓圖片更接近素描圖像,我把一些顏色較深的線條調淡。 使用threshold()將圖(一)中顏色較深的地方分隔出來如圖(二)。                                                                                                                               

s1091521 作業二

圖片
  開發環境 : Windows 11 + Python 3.9.10 in VS code + OpenCV-Python 4.6.0 使用套件 : OpenCV

s1091444 作業2

圖片
同步發布於  https://titaliu1224.github.io/ 功課要求 撰寫一個程式,以灰階模式讀取一張圖像  imread(path, IMREAD_GRAYSCALE) 1. 利用 Sobel Operators 偵測並輸出邊緣成分圖  2. 設計一個類似素描線條的自畫像圖案。 成果 開發環境 Windows 10  Visual Studio Code  Python 3.9.16  OpenCV 4.5.4 實作 使用的 library 如下: import cv2 import matplotlib . pyplot as plt import numpy as np 1/ 讀取灰階圖片 colored_img  用以展示彩色的原圖,而  cv2 . imread ( file_name , cv2 . IMREAD_GRAYSCALE )  會以灰階模式讀入一張圖 。 2/ 邊緣成分圖 首先利用高斯模糊 (Gaussian blur) 去除雜訊(噪聲),使邊界更好檢測: 再利用索伯算子 (Sobel operaters) 提取 x 方向和 y 方向的邊界,之後將兩者的絕對值相加,獲得完整的邊緣成分圖。 3/ 素描線條畫像 這裡簡單的使用  bitwise_not ( )  將邊緣成分圖黑白相反,使其看起來像素描。 總結 本篇使用 高斯模糊 去除雜訊、 索伯算子 提取邊界、 bitwise_not ( ) 進行黑白反轉。 參考資料 Day12-當自動駕駛遇見AI-索伯算子(Sobel Operator) 邊緣偵測 - 索伯算子 ( Sobel Operator ) Opencv学习----Opencv宏定义(CV_8U、CV_8S、CV_16U...) 程式語言-看盤版面(上)-圖框教學 在 Matplotlib 中隱藏座標軸、邊框和空白

s1091527 Hw2

圖片
開發環境 :      Windows 11 + Python 3.8.16 + Open CV 4.6.0 程式功能 :     執行後依序開出三個視窗,分別顯示灰階圖,邊緣偵測,及類素描圖 實作辦法 :     1.使用imread()讀取圖片並轉換成灰階     2.製作X及Y方向的Sobel作為導數進行邊緣偵測     3.將偵測後圖片進行反白後進行高斯模糊便得到類素描圖

s1091404 作業2

圖片
主題: 線條自畫像 (二值化與邊緣偵測 Image Thresholding and Edge Detection)  撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE)  (a)利用 Sobel Operators 偵測並輸出邊緣成分圖  (b)設計一個類似素描線條的自畫像圖案。(想想:如何使用邊緣偵測所得到的點,結合成看似素描筆畫出的線條?) 開發環境: Windows10, visual studio 2019, opencv 4.5.4, c++ 功能說明: 先用imread()將原圖以灰階形式讀取,接著再使用Sobel分別擷取x方向和y方向的輪廓 可藉由調整內核大小(通常使用3, 5, 7)和圖片格式(CV_8U, CV_16S等)來改善邊緣擷取的精確度 convertScaleAbs對擷取結果做絕對值,然後再用addWeighted將x方向和y方向的輪廓相加後得到灰階形式的邊緣成分圖 得到邊緣成分圖後為了得到仿素描筆畫出的線條,將對邊緣圖再做進一步處理。由於想過濾到太過精細的邊緣線條,因此使用threshold將邊緣圖二值化,為了不要失去太多主要的輪廓線條所以將閾值設為80。 最後用bitwise_not讓二值圖黑白反轉,營造出仿素描的線條結果圖

s1083323 作業2

圖片
   作業二 線條自畫像 主題:  撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE)      (a)利用 Sobel Operators 偵測並輸出邊緣成分圖     (b)設計一個類似素描線條的自畫像圖案。(想想:如何使用邊緣偵測所得到的點,結合成看似素描筆畫出的線條?) 開發環境: Win10 C++ Open CV4.7.0 VS 2019 (一) 將圖片讀入後,進行邊緣檢測     Mat edges;     GaussianBlur(img, img, Size(3, 3), 0, 0);     Mat grad_x, grad_y;     Sobel(img, grad_x, CV_16S, 1, 0, 3);     Sobel(img, grad_y, CV_16S, 0, 1, 3);     convertScaleAbs(grad_x, grad_x);     convertScaleAbs(grad_y, grad_y);     addWeighted(grad_x, 0.5, grad_y, 0.5, 0, edges);      讀取圖像並轉換為灰度模式。      使用高斯模糊函數 GaussianBlur() 對圖像進行平滑處理,這樣可以減少噪聲的影響。      使用 Sobel 函數 Sobel() 計算圖像在水平和垂直方向上的梯度,這樣可以找到圖像中的邊                緣。      使用 convertScaleAbs() 函數將梯度圖像轉換為無符號 8 位整數,以便後續處理。      使用 addWeighted() 函數將水平和垂直梯度的影響組合起來,生成一張包含邊緣信息的圖像。 (二)      Mat sketch = 255 - edges;      將邊緣圖像翻轉顏色,以得到白色的線條和黑色的背景。 (三) for (int i = 0; i < sketch.rows; i++) { for (int j = 0; j < sketch.cols; j++) { uchar& pixel = sketch.at<uchar>(i, j);