發表文章

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

s1081440 作業六

圖片
主題     附件中為三張利用將晶片高度以色彩視覺化後的圖片。     請設計一個基於 Run-Length 的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。     部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率(compression ratio)。 開發環境      Windows 11+ Visual Studio Code Python 3.10.4 程式說明     讀取三張圖片,利用PIL的Image library快速取得各圖片的Pixel RGB資訊      之後進行run_length_compression      將資料壓縮儲存到txt檔      確認壓縮後的資料根據重複次數(run_count)可以還原回png檔(也是利用PIL)      from PIL import Image img1 = Image.open( 'img1.bmp' ) img2 = Image.open( 'img2.bmp' ) img3 = Image.open( 'img3.bmp' ) def run_length_compression ( img ):     pixel = list (img.getdata())     run_count = 1     run_compress_img = []     for i in range ( 1 , len (pixel)):         if pixel[i] == pixel[i- 1 ]:             run_count += 1         else :             run_compres...

s1081440 作業5

圖片
  主題: 皮膚偵測 Skin Color Detection 一、 題目說明: 利用你所學的 顏色(Color)的知識與技術,撰寫一個程式來偵測一張輸入照片中的皮膚 區域並將其標示出。(請用附件中的三張照片做測試) Write a program that detect skin color from an image. 二、開發環境: Windows 11+Visual Studio Code+Python 3.10.4+openCV 4.7.0 三、程式碼 import numpy as np import cv2 img1 = cv2 . imread ( 'img1.jpg' , cv2 . COLOR_BGR2HSV ) img2 = cv2 . imread ( 'img2.jpg' , cv2 . COLOR_BGR2HSV ) img3 = cv2 . imread ( 'img3.jpg' , cv2 . COLOR_BGR2HSV ) def skin_detect ( image ):     # 定義皮膚的顏色區間     lower = np . array ([ 0 , 48 , 80 ], dtype = "uint8" )     upper = np . array ([ 20 , 255 , 255 ], dtype = "uint8" )     # 將圖片顏色由RGB顏色空間轉為HSV顏色空間,並根據先前定義的膚色區間製作mask     converted = cv2 . cvtColor ( image , cv2 . COLOR_BGR2HSV )     skinMask = cv2 . inRange ( converted , lower , upper )     # 將一些被誤認為皮膚的區間刪除     kernel = cv2 . getStructuringElement ( cv2 . MORPH_ELLIPSE , ( 11 , 11 ))     skinMask = cv2 . ero...

s1081440作業4

圖片
題目敘述: 影像還原練習 附件中的image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像(將圖中雜訊去除)。 開發環境 Windows 11 VSCode  Python 3.10.4 + OpenCV 4.7.0 程式碼說明 import cv2 import numpy as np import matplotlib . pyplot as plt # 灰階讀取圖片 img = cv2 . imread ( 'image4.png' , cv2 . IMREAD_GRAYSCALE ) # Fast Fourier Transform 取得頻域圖 dft = cv2 . dft ( np . float32 ( img ), flags = cv2 . DFT_COMPLEX_OUTPUT ) dft_shift = np . fft . fftshift ( dft ) freq_image = 20 * np . log ( cv2 . magnitude ( dft_shift [:, :, 0 ], dft_shift [:, :, 1 ])) # 利用threshhold找出高頻干擾的位置 # (794, 377) (805, 411) (788, 441) (810, 509) (790, 542) (805, 573) noise_img = cv2 . threshold ( freq_image , 250 , 255 , cv2 . THRESH_BINARY ) # 製作mask noise_mask = np . ones ( dft_shift . shape , np . uint8 ) noise_mask = cv2 . circle ( noise_mask , ( 794 , 377 ), 10 , ( 0 , 0 , 0 ), - 1 ) noise_mask = cv2 . circle ( noise_mask , ( 805 , 411 ), 10 , ( 0 , 0 , 0 ), - 1 ) noise_mask = cv2 . circle ( noise_mask , ( 788 , 441 ), 10 , ( 0 , 0 , 0 ), - 1 ) no...

s1081440 作業3

圖片
  主題:離散傅立葉轉換 DFT 練習 功能: 撰寫傅利葉轉換程式(Forward Fourier Transform and Inverse Fourier Transform)將一張圖 像轉換至頻域後,將頻譜大小與相位角度各以灰階256 色圖像方式呈現出,再呈現還 原後圖像。 開發環境: Windows 11 Visual Studio Code Python 4.1 OpenCV 4.7.0 程式碼: import cv2 import numpy as np import matplotlib . pyplot as plt # 灰階讀取圖片 img = cv2 . imread ( 'image3.png' , cv2 . IMREAD_GRAYSCALE ) # Fast Fourier Transform # 得到一個三維ndarray dft,每個元素都是一個不同的Fourier子圖 fft = np . fft . fft2 ( img ) fftshift = np . fft . fftshift ( fft )   # 將zero-frequency shift到dft中間,方便頻域圖的辨識 # 因為原始的fft數值太大(Intensity values of the Fourier Image),所以要將這些數值取log調小 # np.abs計算出這些Intensity向量的大小 freq_image = 20 * np . log ( np . abs ( fftshift )) phase_image = np . angle ( fftshift )   # 相位圖表示每組對應頻域圖的相位 # Inverse Fast Fourier Transform ishift = np . fft . ifftshift ( fftshift ) iimg = np . fft . ifft2 ( ishift ) img_back = np . real ( iimg ) # show result plt . subplot ( 221 ), plt . imshow ( img , 'gray' ), plt . title ( 'a' ) plt . axi...

s1081440 作業 2

圖片
一、作業主題:      撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE)       (a)利用 Sobel Operators 偵測並輸出邊緣成分圖      (b)設計一個類似素描線條的自畫像圖案。(想想:如何使用邊緣偵測所得到的點,結合成看似素描筆畫出的線條?) 二、開發環境:      Windows 11+ Visual Studio Code Python 4.1 +OpenCV 4.7.0 三、程式說明:     首先將圖片以灰階讀取     定義高斯模糊和Sobel偵測之函式(參考自opencv的reference網站)      將原圖片以高斯模糊處理後給Sobel Operators偵測,即可得到輪廓圖(執行結果之右圖) 以cv2.threshhold稍微過濾一些線條再利用白色mask進行矩陣減法即可得到類似素描之圖片(執行結果之左圖) 四、執行結果:

s1081440 作業1

圖片
圖像旋轉(Image Rotation) 題目說明: 撰寫一個程式將一張圖像的(a)整張圖像,(b)中心內切圓區域,旋轉一個角度(逆時針旋轉0 度至359 度):利用一個滑動條(trackbar)控制旋轉角度。  開發環境: Windows 11  Visual Studio Code Python 4.1  OpenCV 4.7.0 實作結果: 程式說明: 首先將yzu.bmp檔以一個二維陣列讀取 利用陣列的減法以及一個內切圓的"mask"來將原本的圖片分為內切圓及其補圖兩張圖 定義rotate function並利用Trackbar控制 img_degree拉條則兩張圖一起轉 cir_degree拉條則只轉內切圓部分