發表文章

目前顯示的是有「s1072026」標籤的文章

s1072026 作業 5

圖片
 1112 Digital Image Processing Assignment #5 1072026 鄭惠文 作業說明 膚色偵測 Skin Color Detection 利用你所學的 顏色 (Color) 的知識與技術,撰寫一個程式來偵測一張輸入照片中的皮膚 區域並將其標示出。 ( 請用附件中的三張照片做測試 ) Write a program that detect skin color from an image. 開發環境 Ubuntu 20.04.5 LTS Visual Studio Code OpenCV 3.4.16 C++ 實作方式 1.         讀取圖片 2.         將色彩空間從 BGR 轉換成 HSV 3.         根據課程簡報的論文提供的數值為偵測膚色的基準,對圖像中的每個像素進行比對 4.         將原圖的膚色區塊標示為紅色與偵測到是膚色區塊的 mask 顯示出來 執行結果 圖片三的頭髮有部分顏色因為與膚色太相近,所以也被偵測成膚色了,可能可以搭配偵測材質的方式優化偵測的效果。 陰影的部分則是因為亮度不夠而被偵測不到。 環境設定 執行前需安裝以下套件 ·         cmake ·         OpenCV 3.4.16 ·         libgtk2.0-dev ·         pkg-config ·         xming ...

s1072026 作業 4

圖片
  1112 Digital Image Processing Assignment #4 1072026 鄭惠文 作業說明 影像還原練習 附件中的 image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像 ( 將圖中雜訊去除 ) 。 開發環境 ·         Ubuntu 20.04.5 LTS ·         Visual Studio Code ·         OpenCV 3.4.16 ·         C++ 實作方式 1.      讀取圖片路徑,並用 imread 讀取 image4 2.      利用作業 3 學到的傅立葉轉換取得圖片頻域 3.      normalize(mag, tmp, 0.0, 255.0, NORM_MINMAX); 與 normalize(mag, mag, 0.0, 1.0, NORM_MINMAX); 是分別為了輸出成 png 格式與視窗格式而做的 normalize 4.      輸出頻域的圖檔後,利用小畫家取得 noise 的座標值 5.      將座標紀錄好後,用 drawMask() 畫出黑點遮蓋頻域的 noise 6.      將處理好 filter H 的位置調回對齊原點之前的樣子 7.      之後透過 filter2DFreq(src, filterImg, H); 過濾原圖頻域中的 noise ,得到一張去除雜訊的圖像 8.      對整體的圖檔做點邊緣的調整 執行結果 原圖 ...

s1072026 作業 3

圖片
作業說明 主題:離散傅立葉轉換 DFT 練習 撰寫傅利葉轉換程式 (Forward Fourier Transform and Inverse Fourier Transform) 將一張圖 像轉換至頻域後,將頻譜大小與相位角度各以灰階 256 色圖像方式呈現出,再呈現還 原後圖像。 開發環境 l    Ubuntu 20.04.5 LTS l    Visual Studio Code l    OpenCV 3.4.16 l    C++ 實作說明 1. getOptimalDFTSize():將圖片拓展成 2*3*5 的倍數,可以加速 DFT 的效率 2. copyMakeBorder():利用 getOptimalDFTSize() 拓展圖片大小後,用 copyMakeBorder() 填充拓展的範圍 3. planes:儲存 padded 的實數與虛數平面 4. complex:透過 merge() 合併實數與虛數平面 5. dft():計算離散傅立葉轉換 6. split():把轉換後的 complex 分離成實數與虛數平面 7. 計算 magnitude,並取 log 方便觀測 8. 調整轉換後的圖像,讓圖像中心對齊原點 9. normalize():將 magnitude 調整到 0 到 1 的範圍,方便視覺化 10. phase():算出相位角度 11. normalize():將 phase 調整到 0 到 1 的範圍,方便視覺化 12. 使用 idft() 還原圖像 執行結果 原圖 轉換成頻譜 轉換成相位 還原後圖像 環境設定 執行前需安裝以下套件 l    cmake l    OpenCV 3.4.16 l    libgtk2.0-dev l    pkg-config n    xming l    執行程式時需開啟 l    x11-xserver-utils 如果在 terminal 執行 xhost + 顯示 xhost: unable to open display "" ,需...

s1072026 作業 2

圖片
作業說明 主題:線條自畫像(二值化與邊緣偵測 Image Thresholding and Edge Detection) 撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE) ( a )利用 Sobel Operators 偵測並輸出邊緣成分圖 ( b )設計一個類似素描線條的自畫像圖案。(想想:如何使用邊緣偵測所得到的點,結合成看似素描筆畫出的線條?) 開發環境 Ubuntu 20.04.5 LTS Visual Studio Code OpenCV 3.4.16 C++ 程式功能 輸入圖片路徑,讀取失敗會輸出錯誤訊息 利用 Sobel Operators 偵測並輸出邊緣成分圖 輸出類似素描線條的自畫像圖案 實作方式 讀取圖片路徑,並用 imread 讀取圖片 將讀取的圖片轉為灰階圖 利用 Sobel 計算 x 、 y 方向的 kernal 再透過 convertScaleAbs 、 addWeighted 完成 convolution 的計算,得到邊緣成分圖 grad 利用 adaptiveThreshold 將 grad 二值化,得到線條對比較明顯的 edges 對灰階原圖與重新模糊的灰階原圖做除法,可以混合兩張圖得到顏色較淡的圖片 最後將上一步得到的圖片與對 edges 模糊化處理的圖片混合,便可以得到一張有保留細節並且有明顯線條的素描風格圖片 執行結果 原圖 RGB 轉灰階圖 (a ) 利用 Sobel Operators 偵測並輸出邊緣成分圖 (b) 設計一個類似素描線條的自畫像圖案。 環境設定 執行前需安裝以下套件 cmake OpenCV 3.4.16 libgtk2.0-dev pkg-config xming 執行程式時需開啟 x11-xserver-utils 如果在 terminal 執行 xhost + 顯示 xhost: unable to open display "" ,需要設定 export DISPLAY=:0.0 ,之後執行程式...

s1072026 作業1

圖片
作業說明 主題:圖像旋轉 (Image Rotation) 撰寫一個程式將一張圖像的 (a) 整張圖像, (b) 中心內切圓區域,旋轉一個角度 ( 逆時針旋轉 0 度至 359 度 ) :利用一個滑動條 (trackbar) 控制旋轉角度。 開發環境 l    Ubuntu 20.04.5 LTS l    Visual Studio Code l    OpenCV 3.4.16 l    C++ 程式功能 1.         輸入圖片路徑,讀取失敗會輸出錯誤訊息 2.         分別開啟旋轉整張圖像與中心內切圓區域的視窗 3.         依照滑動條給予的角度旋轉整張圖像 4.         依照滑動條給予的角度旋轉中心內切圓區域 環境設定 執行前需安裝以下套件 l    cmake l    OpenCV 3.4.16 l    libgtk2.0-dev l    pkg-config l    xming : https://sourceforge.net/projects/xming/ n    執行程式時需開啟 l    x11-xserver-utils 如果在 terminal 執行 xhost + 顯示 xhost: unable to open display "" ,需要設定 export DISPLAY=:0.0 ,之後執行程式就能顯示視窗。 執行方式 執行 cmake . 產生 makefile ,該 makefile 用於編譯主程式時動態連結 OpenCV 函式庫與主程式,之後便可執行編譯好的程式。 實作方...