發表文章

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

s1083506 作業6

圖片
主題   Run-Length Based Image Compression  練習 附件中為三張利用將晶片高度以色彩視覺化後的圖片。請設計一個基於 Run-Length 的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率 (compression ratio) 。 實作方法 使用 cv2.imread 讀入圖片,圖片轉為灰階,把二維的圖片資料攤平成一維陣列,用 for 迴圈檢查當前 pixel 是否跟前一 pixel 相同,若相同則 count+1 ,若不相同則將先前的所有相同的 pixel 數量與值存入,重複直到每個 pixel 都檢查過。最後寫入檔案。   執行解果    開發環境 OS : macOS Monterey 12.6.3 Editor : Visual Studio Code Language : Python 3.8.16 Package : OpenCV 4.7.0  

s1083506 作業 5

圖片
  主題   膚色偵測  Skin Color Detection 利用你所學的顏色 (Color) 的知識與技術,撰寫一個程式來偵測一張輸入照片中的皮膚區域並將其標示出。 ( 請用附件中的三張照片做測試 ) 實作方法 使用 cv2.imread 讀入圖片,分別將圖片轉成 HSV 與 YCrCb 色域,設定兩者的數值上限與下限,根據上限與下限分別得到兩者的遮罩,將上述去得的遮罩合併,獲得更好的偵測膚色效果,最後結果顯示出。   執行解果    開發環境 OS : macOS Monterey 12.6.3 Editor : Visual Studio Code Language : Python 3.8.16 Package : OpenCV 4.7.0  

s1083506 作業4

圖片
主題   影像還原練習 附件中的  image4  似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像 ( 將圖中雜   訊去除 ) 。 實作方法 使用 cv2.imread 讀入灰階圖片,對圖片進行 cv2.medianBlur 將圖片中黑色橫線在不影響原始圖片的情況下減到最低,再來使用 cv2.bilateralFilter 在保持邊緣銳度的情況下將降噪,最後用 cv2.GaussianBlur 去除部分的雜訊,將原始圖片跟處理後圖片顯示出來。   執行解果 開發環境 OS : macOS Monterey 12.6.3 Editor : Visual Studio Code Language : Python 3.8.16 Package : OpenCV 4.7.0

s1083506 作業3

圖片
主題   離散傅立葉轉換  DFT  練習 撰寫傅利葉轉換程式 (Forward Fourier Transform and Inverse Fourier Transform) 將一張圖像轉換至頻域後,將頻譜大小與相位角度各以灰階  256  色圖像方式呈現出,再呈現還原後圖像。 實作方法 使用 cv2.imread 讀入圖片,將圖片資料轉換成 np.complex128 ,圖片經過 np.fft.fft2 的二維快速傅立葉轉換後,再將結果 shift 至中間方便觀察,然後分別計算出頻譜跟相位角度,並將結果 normalize 至 0 到 255 以達到灰階 256 圖像 ,顯示上述兩個結果,最後將資料 inverse shift 回原始的樣子,再使用 inverse FFT 將結果還原,即可得到原始圖片並顯示。   執行解果     開發環境 OS : macOS Monterey 12.6.3 Editor : Visual Studio Code Language : Python 3.8.16 Package : OpenCV 4.7.0  

s1083506 作業2

圖片
  主題   線條自畫像  ( 二值化與邊緣偵測  Image Thresholding and Edge Detection) 撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE) (a) 利用  Sobel Operators 偵測並輸出邊緣成分圖 (b) 設計一個類似素描線條的自畫像圖案。 ( 想想 : 如何使用邊緣偵測所得到的點,結合成看似素描筆畫出的線條 ?) 實作方法 使用 cv2.Sobel 分別計算 X 軸與 Y 軸的梯度,經過多次的嘗試個人認為 scale 參數設成 0.5 較為理想,若數值太高雜訊則會太多,反之,數值太低呈現出的線條會太淡。再來,使用 cv2.convertScaleAbs 計算 X 軸與 Y 軸之梯度絕對值。最後,用 cv2.addWeighted 將兩者合併, alpha 與 beta 皆設定為 0.5 ,即可得到黑底白線的邊緣圖。因為,素描大多數都是白底黑線,所以,使用 cv2.bitwise_not 將黑白反轉,就會得到類似於素描的圖片。 執行解果 開發環境 OS : macOS Monterey 12.6.3 Editor : Visual Studio Code Language : Python 3.8.16 Package : OpenCV 4.7.0

s1083506 作業1

圖片
主題   圖像旋轉   撰寫一個程式將一張圖像的 (a) 整張圖像, (b) 中心內切圓區域,旋轉一個角度 ( 逆時針旋轉 0 度至 359 度 ) : 利用一個滑動條 (trackbar) 控制旋轉角度。 實作方法 兩個 trackbar 的改變會呼叫 rotate 或 rotate_CR 兩個 function 。 Rotate function 利用 getRotationMatrix2D 產生旋轉矩陣,需給予中心點與旋轉角度,即可產生,再使用 warpAffine 將旋轉矩陣套用至 輸入圖片 ,最後用 imshow 將圖案顯示至指定視窗。 Rotate_CR function ,首先,使用 np.zeros 生成與輸入圖像相同長寬的 0 矩陣,用於製作取得中心內切圓的 mask ,同理,用 np.ones 生成與輸入圖像相同長寬的 1 矩陣,用於製作取得中心內切圓除外的 mask ,兩者皆使用 and 裁切圖片,最後,利用與上述相同的 getRotationMatrix2D 產生旋轉矩陣,再使用 warpAffine 將旋轉矩陣套用至擷取下的中心內切圓,使用 or 將兩個圖片合併,最後用 imshow 將圖案顯示至指定視窗。 執行解果 開發環境 OS : macOS Monterey 12.6.3 Editor : Visual Studio Code Language : Python 3.8.16 Package : OpenCV 4.7.0