發表文章

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

s1091403 作業6

圖片
主題 : Run-Length Based Image Compression 練習 作業說明 : 請設計一個基於 Run-Length 的壓縮方法,對圖檔作無失真壓縮後儲存成新檔案。 部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率。 ( 平均壓縮率 ) ( 壓縮檔 ) 開發環境 : Windows10         Anaconda 3(22.9.0)         Spyder 5.4.1 Python 3.9 Opencv(4.7.0) Numpy(1.24.2)   程式片段 ( 程式碼截圖在 readme 中 ): 使用 cv2.imread() 輸入照片,接著進入 Compression 函式進行壓縮以及儲存壓縮檔。 Compression: 首先先透過 cv2.split() 取得三種顏色分別的數值 (b,g,r) ,使用 np.array() 將其轉成 array 型態 (np_b,np_g,np_r) 並透過 flitten() 變成一維陣列 (flt_b,flt_g,flt_r) ,接著分別進入 run_length 函式取得壓縮過後的 array(res_b,res_g,res_r) ,再將其組合在一起 (reslut) 並儲存成 txt 檔。 run_length: 使用 res 儲存結果,先取得第一個數字存於 temp 中,透過 count 計算讀入該數字的數量,接下來每次讀入一個數字,若是與 temp 相同則 count 加一,若不同則把 [count,temp] 放入 res 中, temp 變成當下的數字, count 恢復成 1 。 取得壓縮前後檔案大小並進入 pr()函式中 計算壓縮率並印出來,最後在計算平均壓縮率。         pr:         計算並印出及回傳壓縮率。 Demo 影片 : https://youtu.be/gDrkBWj...

s1091403 作業5

圖片
  1112 Digital Image Processing Assignment #5 主題 : 膚色偵測 Skin Color Detection 作業說明 : 利用你所學的顏色 (Color) 的知識與技術,撰寫一個程式來偵測一張輸入照片中的皮膚區域並將其標示出。 ( 原圖 ) ( 標註後的偵測結果 )   開發環境 : Windows10         Anaconda 3(22.9.0)         Spyder 5.4.1 Python 3.9 Opencv(4.7.0) Numpy(1.24.2) 程式片段 ( 程式碼截圖在 readme 中 ): 使用 cv2.imread() 輸入照片,並透過 cv2.resize() 將圖片的大小固定成 400*400 方便看結果。接著進入 detection 函式。 首先先透過 cv2.cvtColor() 將圖片轉換成用 HSV 儲存的形式 (hsv) ,再透過 cv2.inRange() 設定對應的膚色的顏色範圍 (mask) ,並使用 np.zeros_like() 複製一個與原圖片一樣大、各項皆為 0 的 array 用於顯示成功過濾的部分 (skin) ,設定 imask 為在 mask 範圍的結果,並將其放入 skin 獲得過濾膚色過後的圖片,接著再使用 cv2,cvtColr() 將 skin 轉成灰階圖片 (img_grey) ,再將其透過 cv2.GaussianBlur() 進行高斯模糊 (img_blur) 以及 cv2.threshold() 進行二值化去除雜訊,獲得目標圖片 (result) 並回傳。 設定對應的函式回傳的圖片與顯示的視窗,顯示之後按任意鍵會消失。 Demo 影片 : https://youtu.be/p_ARdDlXDxM

s1091403 作業4

圖片
  1112 Digital Image Processing Assignment #4 主題 : 影像還原練習 作業說明 : 附件中的 image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像 ( 將圖中雜 訊去除 ) 。  ( 原圖 ) ( 復原後影像 )   開發環境 : Windows10         Anaconda 3(22.9.0)         Spyder 5.4.1 Python 3.9 Opencv(4.7.0) Numpy(1.24.2) 程式片段 ( 程式碼截圖在 readme 中 ): 使用 cv2.imread(file,cv2. cv2.IMREAD_GRAYSCALE) 輸入灰階照片,其中 cv2.IMREAD_GRAYSCALE 能直接把照片轉換成灰階。設定對應的函式回傳的圖片與顯示的視窗,顯示之後按任意鍵會消失。 使用 np.fft.fft2() 將原影像透過 fft 得到 f ,再透過 np.fft.fftshift() 把中心點移到中心的位置 (fshift) ,再透過 np.abs() 、 np.log() 取絕對值之後再取 log 再乘上 20 得到振福 (magnitude_spectrum) ,最後再使用 cv2.normalize() 進行規一化,使用 cv2.NORM_MINMAX 將陣列數直線性縮放到指定的範圍,獲得目標圖片 (magnitude_spectrum) 。 透過 cv2.imshow() 顯示出當下的振幅圖片 (magnitude_spectrum) ,透過滑鼠點擊標註幾個亮點,標註後會以滑鼠點擊的點為圓心畫出黑色的實心圓形並更新圖片,點擊 q 或是 esc 可以退出標註。 將 magnitude_spectrum 當作 mask 與 fshift 相乘過濾訊號,再使用 np.fft.ifftshift() 把 fshift 的中心點移回去 (notch) ,再使用 np.ifft.fft2() 透過 ifft 轉換回去 (iff_im...

s1091403 作業3

圖片
  1112 Digital Image Processing Assignment #3 主題 : 離散傅立葉轉換 DFT 練習 作業說明 : 撰寫傅利葉轉換程式 (Forward Fourier Transform and Inverse Fourier Transform) 將一張圖像轉換至頻域。 ( 原圖 )                     A 將頻譜大小 以灰階  256  色圖像方式呈現出 B將 相位角度以灰階 256 色圖像方式呈現出 C 呈現還原後圖像   開發環境 : Windows10         Anaconda 3(22.9.0)         Spyder 5.4.1 Python 3.9 Opencv(4.7.0) Numpy(1.24.2) 程式片段 ( 程式碼截圖在 readme 中 ): 使用 cv2.imread(file,cv2. cv2.IMREAD_GRAYSCALE) 輸入灰階照片,其中 cv2.IMREAD_GRAYSCALE 能直接把照片轉換成灰階。在設定對應的函式回傳的圖片與顯示的視窗,顯示之後按任意鍵會消失。 使用 np.fft.fft2() 將原影像透過 fft 得到 f ,再透過 np.fft.fftshift() 把中心點移到中心的位置 (fshift) ,再透過 np.abs() 、 np.log() 取絕對值之後再取 log 再乘上 20 得到振福 (f_log) , np.angle() 取得角度 (f_angle) ,最後再使用 cv2.normalize() 分別將兩張圖進行規一化,使用 cv2.NORM_MINMAX 將陣列數直線性縮放到指定的範圍,獲得目標圖片 (magnitude_spectrum, phase_spectrum) 並輸出。 使用 np.fft.ifftshift() 把 fs...

s1091403 作業2

圖片
主題 : 線條自畫像 ( 二值化與邊緣偵測 Image Thresholding and Edge Detection) 作業說明 : 以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE) , 1.          利用 Sobel Operators 偵測並輸出邊緣成分圖 2.          設計一個類似素描線條的自畫像圖案   開發環境 : Windows10         Anaconda 3(22.9.0)         Spyder 5.4.1 Python 3.9 Opencv(4.7.0) 程式片段 ( 程式碼截圖在 readme 中 ): 使用 cv2.imread(file,cv2. cv2.IMREAD_GRAYSCALE) 輸入灰階照片,其中 cv2.IMREAD_GRAYSCALE 能直接把照片轉換成灰階。在設定對應的函式回傳的圖片與顯示的視窗,顯示之後按任意鍵會消失。 首先是 Sobel Operators 的部分,會先使用 cv2.morphologyEx() 這個形態學函式進行開運算處理 (cv2.MORPH_OPEN) ,先侵蝕再膨脹,去除雜訊 (kernel=(3,3)) ,再使用 Sobel 函數獲得經過 Sobel Operator 處裡的結果 (output) ,函式中第一個參數為要進行運算的圖片,第二個為圖片深度 (-1 表示使用與原圖相同的深度,目標圖片的深度必須大於等於原圖的深度 ) ,第三個以及第四個參數則是分別針對 x 軸與 y 軸抓取邊緣,第五第六則分別是運算區域大小與縮放比例常數,兩個都必須要是正奇數。再來則是利用 cv2.threshold() 進行二值化獲得目標圖片 (output) ,其中如果大於 127 就等於 255 ,小於 127 則等於 0(cv2.THRESH_BINARY) ...

s1091403 作業1

圖片
  主題 : 圖像旋轉 (Image Rotation) 作業說明 : 1.      一張圖像的整張圖像,旋轉一個角度 ( 逆時針旋 轉 0 度至 359 度 ) ,利用一個 trackbar 控制旋轉角度 2.      一張圖像的中心內切圓區域,旋轉一個角度 ( 逆時針旋 轉 0 度至 359 度 ) ,利用一個 trackbar 控制旋轉角度   開發環境 : Windows10         Anaconda 3(22.9.0)         Spyder 5.4.1 Python 3.9 Opencv(4.7.0) 程式片段(更詳細的截圖在readme.doc) :         使用 cv2.imread() 獲取圖片          使用 cv2.imshow() 呈現圖片,並透過 cv2.createTrackbar() 設定 trackbar( 從 0 度最多轉到 359 度 ) ,並透過 cv2.setTrackbarPos() 初始化 trackbar 的位置。         每當 trackbar 改變數值時,將會進入 rotate_img 這個函式,依照需求會有兩種形式:          1.          整張圖像旋轉: 使用 cv2.getRotationMatrix2D() 找出旋轉矩陣,再利用 cv2.warpAffine( ) 獲得旋轉後的圖形。 2.        ...