發表文章

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

s1091533 作業6

圖片
作業6說明 題目: 附件中為三張利用將晶片高度以色彩視覺化後的圖片。 請設計一個基於 Run-Length 的壓縮方法,對圖檔作無失真壓縮後儲存成新檔案。 部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率 (compression ratio)。 開發環境 : Windows 10 + Visual Studio Code + OpenCV 4.7.0 + Python 程式說明 : 1.編碼: run_length_encode() Run-Length 的編碼方法: 有一序列[1,1,2,2,2,3,3,3,3,4], 用  Run-Length 的壓縮方法進行壓縮, 結果為[(1,2),(2,3),(3,4),(4,1)] ,表示序列有連續兩個1,連續三個2,連續四個3,連續一個4。 2.解碼:  run_length_decode() 3.壓縮圖片: compress_image() 4.解壓縮圖片: decompress_image() 5.讀取圖片: cv2.imread() 6.計算平均壓縮率: average_compression_ratio =  (len(compressed_data1) + len(compressed_data2) +len(compressed_data3)) / (img1.size + img2.size + img3.size) Demo: 結果:

s1091533 作業5

圖片
  作業5說明 題目: 膚色偵測 Skin Color Detection 利用你所學的 顏色(Color)的知識與技術,撰寫一個程式來偵測一張輸入照片中的皮膚 區域並將其標示出。(請用附件中的三張照片做測試)  開發環境 : Windows 10 + Visual Studio Code + OpenCV 4.7.0 + Python 程式說明 : 1.把圖像轉換到HSV色域。 2.分別獲取h,s,v通道分量圖像。 3.根據原圖大小創建一個全0的矩陣。 4.遍歷原圖像,判斷HSV通道的數值,若在指定範圍內,則將新圖的點設為255,否則設為0。 5.將新圖像轉換為包含紅色通道的BGR圖像。 6.創造mask,只保留皮膚的部分,剩下部分為透明。 7.將皮膚部分的紅色圖像與原圖疊合。 Demo:

s1091533 作業4

圖片
作業4說明 題目: 影像還原練習,附件中的 image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像(將圖中雜 訊去除)。  開發環境 : Windows 10 + Visual Studio Code + OpenCV 4.7.0 + Python 程式說明 : 1.np.fft.fft2():將圖片進行傅立葉轉換。 2.mask = np.zeros((rows, cols), np.uint8):去除頻譜圖的雜訊,將頻譜圖與mask相乘,得到經過濾波器處理後的頻譜圖。 3. np.fft.ifft2():將處理過的頻譜圖進行反傅立葉轉換,得到新的圖像。 4.cv2.GaussianBlur():最後將圖片進行高斯模糊,去除邊緣效果和高頻噪聲, 得到較自然的圖像。 5. plt.imshow():套用matplotlib,將結果顯示出來。 Demo:

s1091533 作業3

圖片
  作業3說明 題目: 離散傅立葉轉換 DFT 練習 撰寫傅利葉轉換程式(Forward Fourier Transform and Inverse Fourier Transform)將一張圖像轉換至頻域後,將頻譜大小與相位角度各以灰階 256 色圖像方式呈現出,再呈現還原後圖像。  開發環境 : Windows 10 + Visual Studio Code + OpenCV 4.7.0 + Python 程式說明 : (a)傅立葉轉換 1.cv2.dft(): 做離散傅立葉轉換。 2.np.fft.fftshift():移頻,將低頻部分移動到影像的中心。 (b)頻譜大小 1.cv2.magnitude():計算由實部和虛部部組成的複數大小。 2.np.log():對傅立葉轉換的結果進行對數變換,以便可視化頻域訊息。 (c)相位角度 1.np.angle():計算相位角度。 (d)反傅立葉轉換 1.np.fft.ifftshift(): 將高頻部分移動到影像的中心。 2.cv2.idft(): 做反離散傅立葉轉換。 3. cv2.magnitude():計算 反離散傅立葉轉換後的影像大小。 (e)顯示結果 1.套用matplotlib, 用plt.imshow()將結果顯示出來。 Demo:

s1091533 作業2

圖片
作業2說明 題目: 線條自畫像 (二值化與邊緣偵測 Image Thresholding and Edge Detection)  撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE) (a)利用 Sobel Operators 偵測並輸出邊緣成分圖 (b)設計一個類似素描線條的自畫像圖案。(想想:如何使用邊緣偵測所得到的點,結合 成看似素描筆畫出的線條?) 開發環境 : Windows 10 + Visual Studio Code + OpenCV 4.7.0 + Python 程式說明 : (a)利用 Sobel Operators 偵測並輸出邊緣成分圖 1.  cv2.imread():  讀取圖片,並轉換成灰階圖片。 2.  cv2.GaussianBlur(): 利用高斯模糊函式去除圖片的噪點,找到的輪廓會更加精準。 3.  cv2.Sobel(): 利用sobel operator偵測圖片的邊緣(輪廓)。 4.  cv2.addWeighted(): 將偵測水平和垂直邊緣的兩張圖結合,就能得到邊緣成分圖。 (b)設計一個類似素描線條的自畫像圖案 1. cv2.treshold(): 將邊緣成分圖轉為二進制圖像。 2. cv2.bitwise_not():  將邊緣成分圖黑白相反。 3.  cv2.addWeighted(): 疊加上述兩張圖,就能得到 類似素描線條的自畫像圖案。 Demo: (a) 邊緣成分圖 (b)  類似素描線條的自畫像圖案

s1091533 作業1

  作業1說明 題目: 圖像旋轉 (Image Rotation) 撰寫一個程式將一張圖像的(a)整張圖像,(b)中心內切圓區域,旋轉一個角度(逆時針旋 轉 0 度至 359 度):利用一個滑動條(trackbar)控制旋轉角度。  開發環境 : Windows 10 + Visual Studio Code + OpenCV 4.7.0 + Python 程式說明 : (a) 旋轉整張圖像 h , w = img .shape[: 2 ] center = ( w / 2 , h / 2 ) 讀取整張圖像的長和寬,並找出圖片的中心點當作旋轉的支點。 rotation = cv2 .getRotationMatrix2D( center , angle , 1.0 ) rotated = cv2 .warpAffine( img , rotation , ( w , h )) 利用 cv2.getRotationMatrix2D() 和 cv2.warpAffine() 函式讓圖像逆時針旋轉,圖像的大小不變。 cv2 .createTrackbar( 'Angle' , 'Rotated Image' , 0 , 359 , rotate_image ) 創建滑桿,讓圖像旋轉的角度跟著滑桿的值不斷變化,來達到用滑桿控制旋轉角度的功能。 Demo: (b) 旋轉圖像的中心內切圓區域 height , width = img . shape [: 2 ] center = ( int ( width / 2 ), int ( height / 2 )) radius = min ( center [ 0 ], center [ 1 ]) 讀取整張圖像的長和寬,並找出圖片的中心點當作旋轉的支點。 找出原圖像的長和寬其中較短的那一項並除以 2 來作為內切圓的半徑。 圖像旋轉和創建滑桿的方法與上題相同。 mask = np . zeros_like ( img ) cv2 . circle ( mask , center , radius , ( 255 , 255 , 255 ), - 1 ) mask = cv2 . cvtColor ...