發表文章

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

s1093320 作業6

圖片
作業說明: 附件中為三張利用將晶片高度以色彩視覺化後的圖片。 請設計一個基於 Run-Length 的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。 部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率  開發環境: window10, vscode, python3.11.1 程式實作: 對三個檔案進行壓縮。原始圖像的檔案名稱是 img1.bmp 、 img2.bmp 和 img3.bmp 。壓縮檔案的輸出檔案名稱分別為 compressed_image1.bin 、 compressed_image2.bin 和 compressed_image3.bin 。 開始遍歷 img_array 中的每一行。對於每一行,先建立一個空的列表 row_compressed ,並將第一個像素的顏色值設定為當前值 current_value ,並將計數器 count 初始化為 1 。 進行 run-length encoding ,遍歷這一行的像素。對於每個像素,程式碼檢查其顏色是否和當前值 current_value 相等。如果相等,count +1 ,表示我們有更多連續的同色像素。如果不相等,代表到達了當前顏色的結尾,將計數 count 和當前顏色  current   作為添加到 row_compressed 。然後我們將新的顏色設為 current_value ,並將 count 重置為 1 。 遍歷完一行後,添加最後一對count   和 current_value 。將row_compressed 添加到 compressed_data ,並繼續處理下一行。 遍歷完所有行之後,就得到了壓縮後的圖像數據compressed_data 。 壓縮比率:最後,程式會計算原始圖像大小與壓縮檔案大小的比率,即壓縮比率。 執行結果:

s1093320 作業5

圖片
  一 . 題目說明 : 利用你所學的 顏色 (Color) 的知識與技術,撰寫一個程式來偵測一張輸入照片中的皮膚 區域並將其標示出。 ( 請用附件中的三張照片做測試 ) Write a program that detect skin color from an image. 二 . 開發環境 : Python 3.11.1, opencv4.6.0, vscode, win10 三 . 程式說明 : 1.       讀取圖片 2.   先 resize 圖片,不是必要,只是顯示方便。 3. 將圖片轉為 HSV 顏色空間。 4. 定義肌膚顏色範圍,使用 inRange 創建 mask 。 5. 用 bitwise_and 將mask套用在圖上, 獲得肌膚區域的圖像。 6. 將所有標記為白色的像素,也就是皮膚區域轉為紅色方便觀察。 7. 輸出圖像 四.輸出結果

s1093320 作業4

圖片
 1.題目敘述:      附件中的image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像(將圖中雜訊去除)。 2.開發環境: python 3.11.1 opencv 4.6.0 vscode win10 3.實作方法: 1. 先進行傅立葉轉換並center。 2. 計算出頻譜並normalize,轉格式。 3. 將頻譜圖進行二值化,這裡取高於185的 4. 後面使用mask把中心亮光處去掉,會出現下圖 5. 使用cv2.findContours找出白點輪廓,得出輪廓後遍歷全部輪廓得出每個輪廓的中心點存入notch_filter_arr 6. 接下來對notch_filter_arr裡的所有點使用circle,以便將圓內的頻率刪除。 7. 將得出來的notch_filter乘上一開始中心化過的傅立葉轉換圖,然後再反轉將中心點移回角落,再逆傅立葉轉換,再轉格式,得出reconstructed圖。 8. 其實這樣就可以了,但加上高斯模糊會更好。 輸出結果:

s1093320 作業3

圖片
 一.題目:  離散傅立葉轉換 DFT 練習 撰寫傅利葉轉換程式(Forward Fourier Transform and Inverse Fourier Transform)將一張圖 像轉換至頻域後,將頻譜大小與相位角度各以灰階 256 色圖像方式呈現出,再呈現還 原後圖像。 二.開發環境: windows10, visual studio code, opencv 4.7.0, python 3.11.1 三.實作方法: 1.利用numpy的函數fft2,ffshift進行傅立葉轉換,平移。 2.用np.abs和取log並乘上一個數將值放大,得出頻譜大小。 用np.angle算出相位角度。 3.用cv2對magnitude_spectrum和phase_spectrum進行normalize,讓範圍在0~255之間,並轉為8位元類型。 4.用plt輸出頻譜大小和相位大小。 5.用ifftshift, ifft2,abs,unit8還原成原影像。 6.plt輸出還原影像。 四.執行結果:

s1093320 作業2

圖片
 主題: 線條自畫像 (二值化與邊緣偵測 Image Thresholding and Edge Detection) 題目:(a)利用 Sobel Operators 偵測並輸出邊緣成分圖 (b)設計一個類似素描線條的自畫像圖案。 開發環境:Windows10, Visual Studio Code,python 3.11.1,OpenCV 4.6.0 程式說明: (a) Sobel 可以對圖片進行 convolution ,計算梯度值。 用 Sobel 函數對 x 和 y 軸計算,使用 addweighted 加權 (0.5) 合併,然後用 convertScaleAbs 將綜合梯度轉化為圖像格式,最後再顯示出來。 (b) 先用高斯模糊,來減少雜訊,這樣比較方便檢測邊緣。接下來一樣用 sobel 跟 addweighted ,之後用 threshold 進行二值化 ( 用 THRESH_TOZERO 跟 THRESH_BINARY 都可以,我覺得前者更像素描一點 ) ,然後再用 morphological operation 進一步處理,可以填充圖像的空洞,也可以讓線盡量連在一起,最後一樣用 convertScale 調整成圖像格式,最後黑白反轉,得到二值化的類似素描圖。

s1093320 作業1

圖片
題目:圖像旋轉(Image Rotation) 開發環境: visual studio 2022 opencv4.7.0 說明: mask1以center為圓心,半徑為radius畫一個圓,並填充為白色。mask2則是由mask1的所有像素反轉得出,會得到mask1相反的區域。之後把各自的mask套用在image1和image2填為黑色。 創建兩個窗口並調整窗口大小,並在兩個窗口添加trackbar,trackbar最大值設為360,並call function。 funcion中使用getRotationMatrix2D獲得旋轉矩陣 旋轉整張圖就是最後用得出的旋轉矩陣對圖片進行旋轉變換,生成出output image就可以在對應的窗口輸出結果了。 至於只旋轉內切圓的就是只轉中間的圓形,最後的圖片是旋轉的圓形加上區域為圓形以外的image1就好了。 影片: