發表文章

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

s1081629 作業5

圖片
  主題: 皮膚偵測 Skin Color Detection 一、 題目說明: 利用你所學的 顏色(Color)的知識與技術,撰寫一個程式來偵測一張輸入照片中的皮膚 區域並將其標示出。(請用附件中的三張照片做測試) Write a program that detect skin color from an image. 二、開發環境: OS: Windows 10  Visual Studio Code Python 3.11.2  opencv-4.7.0.72 numpy 1.24.2 三、實作辦法: Step1 . 將圖片使用 cv.imread()函式讀入,以cvtColor將圖片轉為HSV格式 。 Step2.  定義皮膚的HSV範圍,此次將皮膚範圍設定在[0,48,80] 至 [20,255,255] 之間。 Step3.  以inRange() 函式進行皮膚偵測得到mask。 Step4.  複製一張源先輸入的圖片,與mask對比,將mask>0的部分用紅色(0,0,255)#BGR 覆蓋。 三、實作成果: (a) (b)  (c)

s1081629 作業6

圖片
  主題: Run-Length Based Image Compression 練習 一、 題目說明: 附件中為三張利用將晶片高度以色彩視覺化後的圖片。 請設計一個基於 Run-Length 的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。 部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率 (compression ratio)。 二、開發環境: OS: Windows 10  Visual Studio Code Python 3.11.2  opencv-4.7.0.72 numpy 1.24.2 三、實作辦法: Step1 . 將圖片使用 cv.imread()函式讀入 。 Step2. 使用RLE演算法,以x軸為單位,將每一行連續得的素段添加到壓縮數據中,對圖像進行壓縮。 Step3.  根據壓縮數據填充像素值。 Step4.  儲存壓縮後的圖片,以.png格式存取,並讀取壓縮前後圖片大小,計算壓縮率並輸出。 三、實作成果: 左邊圖像為原圖,右邊圖像為壓縮後的圖片,圖片下方呈現計算後的壓縮率。 (a) Compression ratio: 10.898219158536802 (b) Compression ratio: 7.772166322008549 (c) Compression ratio: 11.095683766762402

s1081629 作業4

圖片
  主題: 影像還原練習 一、 題目說明: 附件中的 image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像(將圖中雜訊去除)。  二、開發環境: OS: Windows 10  Visual Studio Code Python 3.11.2  opencv-4.7.0.72 numpy 1.24.2 三、實作辦法: Step1 . 將圖片使用 cv.imread()函式讀入,並用IMREAD_GRAYSCALE以灰階模式存取。 Step2. 使用np.fft.fft2() 函式對原圖片進行傅立葉轉換,並將轉換後的頻率分量移至頻譜中心。 Step3. 創建一個遮罩mask,保留低頻率並移除高頻率,其中帶著一個參數d0,代表濾波器的半   徑,d0愈大,保留低頻成分就愈多,刪除高頻的成分也愈多,經過測試,d0約在25~30之間還原的成像較為清楚。 三、實作成果: (a) 原圖 (a) 還原後圖像

s1081629 作業3

圖片
一、作業主題:  離散傅立葉轉換 DFT 練習           撰寫傅利葉轉換程式(Forward Fourier Transform and Inverse Fourier Transform)將一張圖 像轉換至頻域後,將頻譜大小與相位角度各以灰階 256 色圖像方式呈現出,再呈現還 原後圖像。 二、開發環境: OS: Windows 10  Visual Studio Code Python 3.11.2  opencv-4.7.0.72 numpy 1.24.2 三、實作辦法: Step1 . 將圖片使用 cv.imread()函式讀入,並用IMREAD_GRAYSCALE以灰階模式存取。 Step2. 使用np.fft.fft2() 函式對原圖片進行傅立葉轉換,並將轉換後的頻率分量移至頻譜中心。 Step3. 使用np.log計算出頻譜大小的絕對值。 Step4. 使用np.angle計算出相位角大小。 Step5. 對移至頻譜中心的頻率分量使用 np.fft.ifftshirft() 以及 np.fft.ifft2() 函式還原出原本的圖像。 Step6. 對上述求出的三個矩陣使用 cv.normalize() 使色階轉化成0~255的範圍以便輸出。 四、實作結果: 1.原先圖像 :  2.頻譜大小 :  3.相位角: 4.還原後圖像:  

s1081629 作業2

圖片
  一、作業主題: 線條自畫像  (二值化與邊緣偵測 Image Thresholding and Edge Detection) 撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE)  (a)利用 Sobel Operators 偵測並輸出邊緣成分圖 (b)設計一個類似素描線條的自畫像圖案。(想想:如何使用邊緣偵測所得到的點,結合 成看似素描筆畫出的線條?)  二、開發環境: OS: Windows 10  Visual Studio Code Python 3.11.2  opencv-4.7.0.72 numpy 1.24.2 三、實作辦法: step1 . 透過  imread(path, IMREAD_GRAYSCALE) 讀取灰階圖片。 step2 . 透過 Sobel Operators 計算x,y軸的梯度,並將兩者的平方相加開根號,得到邊緣成分圖,              其中ksize經過測試後,設定為3能得到相對清楚的邊緣。      step3 . 將八位元最大值255減掉剛剛 step2. 獲得的邊緣成分圖,會得到與原先黑白相反的圖片。                step4.  將 step3. 獲得的圖片,使用threshold函式,使用OTSU將圖片二值化,使原先不明顯的                 輪廓凸顯出來。                   三、實作結果: Step1. 讀取灰階圖片 Step2. 邊緣成分圖      Step3. 黑白相反的邊緣成分圖 Step4. 將圖片二值化

s1081629 作業1

圖片
  一、作業主題: 圖像旋轉 (Image Rotation)           撰寫一個程式將一張圖像的(a)整張圖像,(b)中心內切圓區域,旋轉一個角 度(逆時針旋轉 0 度至 359 度):利用一個滑動條(trackbar)控制旋轉角度。 二、開發環境: OS: Windows 10  Visual Studio Code Python 3.11.2  opencv-4.7.0.72 numpy 1.24.2 三、實作辦法: 1.利用 imread()讀取輸入的圖像。 2.讀取圖片大小並計算圖片旋轉中心位置。 3.若 mode =='b' 時,將原本圖像中心用 circle()畫出一個黑色的圓,另外 將原先中心圖像使用 getRectSubPix()取出圖像中心半徑 100 的圖像。  4.建立主視窗,並使用 createTrackbar()在視窗中增加拉桿,並連接到函式 self.__rotation()。   5.使用 getRotationMatrix2D 取得旋轉矩陣,並利用 warpAffine 將影像依 照輸入角度旋轉,若 mode=='b'時,創建一個與原始圖片大小一樣的零 矩陣 mask,繪製一個與黑色圓型相同的白色圓,之後用 bitwise_and() 將旋轉之後的圖像與 mask 遮罩,保留圓形區域內的圖像,之後圖像相加 得到 result。 四、執行結果 1. mode == 'a'  68 Degree :  203 Degree: 2.mode == 'b' 101 Degree :  219 Degree: