發表文章

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

s1091402 作業6

圖片
題目敘述 Run-Length Based Image Compression 練習 附件中為三張利用將晶片高度以色彩視覺化後的圖片。 請設計一個基於Run-Length 的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。 部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率 (compression ratio)。 開發環境 Windows10、Spyder (Python 3.8)、OpenCV 4.7.0 說明 1. 讀入圖檔,並輸出檔案大小 2. cv2.split(image)將圖片分成b、g、r三個通道 3. 分別將flatten()將b、g、r存成一維陣列 4. rle_encode函式處理基於Run-Length的壓縮法方法,即用連續出現的次數取代連續重複的數據,例如:[1, 1, 1, 2, 2, 3, 3, 3, 3]->[3, 1, 2, 2, 4, 3]。 5.  生成.txt檔案,寫入圖像的長寬尺寸(image.shape[])以及壓縮數據,並輸出壓縮檔之檔案大小 6. 計算平均壓縮率 壓縮檔及原圖 各檔案之原始大小、壓縮後大小、壓縮率 以及平均壓縮率

s1091402 作業5

圖片
  題目敘述 利用你所學的顏色(Color)的知識與技術,撰寫一個程式來偵測一張輸入照片中的皮膚區域並將其標示出。(請用附件中的三張照片做測試) Write a program that detect skin color from an image. 開發環境 Windows10、Spyder (Python 3.8)、OpenCV 4.7.0 說明 1.讀取圖片,用 resize()調整圖片大小 2.cv2.cvtColor(img,cv2.COLOR_BGR2HSV )將圖片色彩(由BGR)轉成HSV 3.設定膚色範圍( 5<H<40, 60<S<180, 40<V<255 ) 4.cv2.inRange獲取皮膚區域,建立mask 5.將膚色區域於原圖標示成紅色 6.最後顯示mask以及於原圖上標示膚色區域

s1091402 作業4

圖片
  題目敘述 影像還原練習 附件中的image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像(將圖中雜 訊去除)。 開發環境 Windows10、Spyder (Python 3.8)、OpenCV 4.7.0 說明 (原圖) 延用作業3得到的 頻譜圖 ,可以看到六個明顯的白點, 即雜訊 ( 峰值較高 ) (頻譜圖) 利用notch filter去除雜訊 用滑鼠點選雜訊部分,並用黑點遮蓋,結束後按下esc離開繪圖。 將修改後的頻譜圖乘上原本傅立葉轉換後的值 然後進行Inverse Fourier Transform,得到過濾後圖像 經過 magnitude()計算幅值、 normalize() 標準化,讓圖像以灰階256 色圖像方式呈現,並轉成 uint8型態(避免負數) 呈現出圖像。 (經notch filter後的圖) 最後再用高斯模糊處理其他雜訊 (高斯模糊後的圖)

s1091402 作業3

圖片
  題目敘述 離散傅立葉轉換 DFT 練習 撰寫傅利葉轉換程式(Forward Fourier Transform and Inverse Fourier Transform)將一張圖 像轉換至頻域後,將頻譜大小與相位角度各以灰階256 色圖像方式呈現出,再呈現還 原後圖像。 開發環境 Windows10、Spyder (Python 3.8)、OpenCV 4.7.0 說明 1、讀取圖像並轉為灰階 2、用getOptimalDFTSize得到 最適合進行傅里葉變換的圖像大小,然後用 copyMakeBorder進行 padding,並轉成float32來計算 3、fp(x,y) × (−1)^(x+y) to center the Fourier transform 4、dft()  計算傅立葉轉換,然後用 split()將虛數與實數分開 magnitude()計算幅值,並取log乘上20得到振幅 normalize() 標準化,讓圖像以灰階256 色圖像方式呈現,並轉成 uint8型態(避免負數) phase() 計算相位 並同上進行標準化。 idft() 計算還 原後圖像 magnitude()計算幅值 並同上進行標準化。 Original Spectrum Phase IDFT

1091402 作業2

圖片
  題目敘述 主題: 線條自畫像 (二值化與邊緣偵測 Image Thresholding and Edge Detection) 撰寫一個程式,以灰階模式讀取一張圖像 (a)利用Sobel Operators 偵測並輸出邊緣成分圖 (b)設計一個類似素描線條的自畫像圖案。 開發環境 Windows10、Spyder (Python 3.8)、OpenCV 4.7.0 說明 cv2.imread() 讀取圖片 (原圖) (a) cv2.cvtColor( img,cv2.COLOR_BGR2GRAY) 將圖片轉成灰階 用cv2.Sobel(影像,輸出圖像的數據類型,計算方向x軸, 計算方向y軸 ) 分別對x、y軸進行邊緣檢測 cv2.convertScaleAbs() 將計算完的x、y軸的值轉回原本的unit8格式 cv2.addWeighted()  將計算完的x、y合併 (b) cv2.bitwise_not() 將黑白反轉

s1091402 作業1

圖片
題目敘述 撰寫一個程式將一張圖像的 (a)整張圖像, (b)中心內切圓區域,旋轉一個角度(逆時針旋轉0度至359度):利用滑動條(trackbar)控制旋轉角度。 開發環境 Windows10、Spyder (Python 3.8)、OpenCV 4.7.0 說明 cv2.imread() 讀取圖片 cv2.imshow() 顯示圖片 (h, w, d) = img.shape 獲取圖片長寬高 center = (w//2, h//2) 計算中心座標 radius = min(w//2, h//2) 得到最小半徑 cv2.createTrackbar()建立 滑桿 cv2.waitKey(0) 等待按鍵輸入 cv2.destroyAllWindows() 關閉視窗 (a) cv2.getRotationMatrix2D() 創建二維旋轉矩陣 cv2.warpAffine() 將指定圖像根據旋轉矩陣進行旋轉 (b) np.zeros_like()建立與圖形一樣大小的遮罩 cv2.circle()在遮罩上畫一個圓形 cv2.bitwise_not()建立一個與原本反過來的遮罩,並建立白色背景 將原圖分別在兩遮罩上進行cv2.bitwise_and()以得到所需部分的圖(cr、background) 同(a),對圖像進行矩陣旋轉 最後用cv2.add()將兩圖(cr、background)合併 結果