發表文章

目前顯示的是 6月, 2023的文章

s1093309 作業6

  Run-Length Based Image Compression 練習     附件中為三張利用將晶片高度以色彩視覺化後的圖片。     請設計一個基於Run-Length 的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。     部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率     (compression ratio)。 作業環境:      OS:windows10      Editor:Visual Studio 2019      Language:C++          Package:OpenCV - 4.7.0 程式說明: 1.首先,指定圖片的存放位置和檔案名稱格式。 2.使用迴圈依次讀取10張圖片。 3.對於每張圖片,讀取圖片並確認是否讀取成功。 4.將圖片轉換為壓縮前的位元組數組,並將其存儲在imageData向量中。 5.創建一個壓縮後的位元組向量compressedData,並初始化計數器count為1。 6.從圖片的左上角到右下角進行遍歷,對每個像素進行Run-Length編碼: *如果當前像素與前一個像素相同,增加計數器count。 *如果當前像素與前一個像素不同,將前一個像素的RGB值和計數器count存儲到compressedData中, 然後重新初始化計數器count。 7.將最後一個像素的RGB值和計數器count存儲到compressedData中。 8.將壓縮後的資料以二進制形式寫入到以".bin"為擴展名的壓縮檔案中。 9.讀取壓縮後的資料,並將其存儲到File_compressedData向量中。 10.解壓縮資料,將壓縮資料中的像素值和計數器進行還原,並將解壓縮後的像素值存儲到uncompressedData向量中。 11.創建解壓縮後的圖片File_img,並將uncompressedData中的像素值填充到圖片中。 12.將解壓縮後的圖片以BMP檔案格式儲存。 程式碼中使用了迴圈和條件語句來處理多張圖片,並且使用了OpenCV的imread函式讀取圖片、imencode函式將圖片轉換為位元組數組、imwrite函式將圖片寫入到檔案,以及fstream庫中的函式來進行檔案的讀寫操作。

s1093705 作業6

圖片
  Run-Length Based Image Compression 練習 題目說明: 附件中為三張利用將晶片高度以色彩視覺化後的圖片。 請設計一個基於Run-Length 的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。 部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率 (compression ratio)。 開發環境: Windows 11  Visual Studio Code Python 3.11.2  Opencv 4.7.0 實作結果: Run length format: [0, 0, 0, 128, 255, 255] -> 0 3 128 1 255 2 程式說明: 1. Import  library from PIL import Image import numpy as np import os 2. run-length encoding algorithm def RLE_encoding ( img , bits = 8 ):     encoded = []     count = 0     prev = None     fimg = img .flatten()         for pixel in fimg :         if prev == None :             prev = pixel             count += 1         else :             if prev != pixel :                 encoded . append (( count , prev ))                 prev = pixel                 count = 1             else :                 if count < ( 2 ** bits ) - 1 :                     count += 1                 else :                     encoded . append (( count , prev ))                

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_compress_img.append((pixel[i- 1 ], run_count))             run_count = 1     run_compress_img.append((pixel[- 1 ], run_count))     return run_compress_img def output_txt ( lst , path ):     f = open (path, 'w' )     f.writelines( ' %s %s

s1081428 作業六

圖片
 主題      附件中為三張利用將晶片高度以色彩視覺化後的圖片。      請設計一個基於 Run-Length 的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。      部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率(compression ratio)。 開發環境      ubuntu 22.04 + Opencv-python 4.7.0 in Visual Studio code 程式說明     讀取三張圖片,將各圖片的rgb編碼分開計算,並降維成一維陣列方便計算。     採最基本的run-length策略,判斷相鄰兩格pixel的呈色是否相同,一直紀錄到有不同的數值為止 ,最終編碼僅保存色值和      連續數量,減少對每個pixel的儲存。     以string儲存編碼,以json格式儲存,讀取則直接讀取整個json檔在進行decompress。     decompress則讀取json拆解整段編碼進行還原,格式為(色值,數量)存入回一維陣列,再reshape成二維陣列以還原成最      終圖片。          壓縮率示意 參考資源     Run-length

s1091404 作業6

圖片
 主題: Run-Length Based Image Compression 練習 附件中為三張利用將晶片高度以色彩視覺化後的圖片。 請設計一個基於 Run-Length 的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。 部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率 (compression ratio)。 開發環境: Window 10, python 310, Opencv 4.5.4, visual studio code 功能說明: 使用以下函式庫進行撰寫 1. 首先分別將img1, img2, img3讀入,由於圖片大小會引響到程式的執行速度,因此將這三張圖片的大小重新調整為(720, 480)   img1 img2 img3 2. 對三張圖片使用Run-length Compression,程式碼撰寫於function compress中,compress的參數分別代表輸入圖片、圖片號碼、平均壓縮率(mean)。 在function compress中,先將原圖轉換成灰階,接著再去偵測灰階圖每個pixel的灰度,使用for迴圈去實現Run-Length Compression的運作,偵測連續的相同灰度值。image1儲存灰階圖每個pixel的灰度值,而image3則是儲存壓縮過後的灰度值。 跑完Run-Length Compression後將image1和image2分別存為txt文件檔,方便觀察壓縮過後檔案的大小差異,同時計算出壓縮率。 儲存txt文件檔前 儲存txt文件檔後 compress會返回每張圖的壓縮率,方便之後計算平均壓縮率mean,mean會顯示在visual studio code的terminal

s1093336 作業6

圖片
   一、作業說明 附件中為三張利用將晶片高度以色彩視覺化後的圖片。請設計一個基於 Run-Length 的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率 (compression ratio) 。  二、開發環境 OS: Windows 11 64bit Editor: Visual Studio 2019 Language: C++ Package: OpenCV-4.5.0    三、程式功能 執行方式 直接執行本程式 執行設定 查看執行結果 程式會自動輸入三張圖片並輸出對應的dat(此為壓縮檔)與解壓縮的 檔案(檔名 + Decoding.bmp)。 最後一行為三組之平均壓縮率。 輸出壓縮前後資料  四、實作過程 壓縮 整張圖像讀入。 歷遍圖片紀錄RGB次數與RGB值(EX: 50,0,0,255)。 輸出dat檔。 解壓縮 讀入dat檔。 開符合長寬的空畫布。 根據dat紀錄之訊息依序填回顏色。 儲存圖片。 以下為對比圖bmp為壓縮前原圖,dat為壓縮後解壓縮得產物。

s1091703 作業6

圖片
 題目:Run-Length Based Image Compression 練習  說明:附件中為三張利用將晶片高度以色彩視覺化後的圖片。 請設計一個基於 Run-Length 的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。 部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率 (compression ratio) 開發環境:  Window10 + Visual Studio 2022 + C++ 程式說明: ->利用struct來儲存bmp的結構。 ->利用迴圈確保每個pixel跑過,將連續重複的pixel儲存成單個pixel ->壓縮率的計算:原size/壓縮後size*100(因為要以%輸出) 結果呈現: 壓縮率: 輸出: img1/2/3.txt:壓縮檔 de_img1/2/3.bmp:解壓縮檔

s1083317 作業6

圖片
  S1083317 作業 6   題目 : 附件中為三張利用將晶片高度以色彩視覺化後的圖片。 請設計一個基於 Run-Length 的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。 部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率 (compression ratio) 。 環境 : Windows 10 Visual Studio 2019( 語言 python) OpenCV 4.5.5.62 程式碼片段解釋 : 使用 基於 Run-Length 的壓縮方法 逐像素檢查每個像素與前一個像素是否相等,是就計算 count 否則新一輪 EX AAABBC -> A3B2C1 以下就是在做這個 執行完後會得到 compressed_image list 裡面包含連續的像素的顏色值與次數 (pixel, count) ,接下來就是只要記錄下來就好了 結果圖片 :

s1091444 作業 6

圖片
同步發布於 titaliu1224.github.io 功課要求 附件中為三張利用將晶片高度以色彩視覺化後的圖片。  請設計一個基於Run-Length 的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。    部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率 (compression ratio)。 成果 開發環境 Windows 10  Visual Studio Code  Python 3.9.16  OpenCV 4.5.4 實作 使用的 libraries 如下: import cv2 , os import matplotlib . pyplot as plt import numpy as np 1/ 利用迴圈讀入三張圖片 建立一個儲存三張圖片路徑的 list ,使用迴圈讀入圖片並送至 compress(original_img, compress_file)  進行壓縮,取得壓縮率並儲存在  compress_ratio[i]  中。 2/ 壓縮圖片 2.1/ 計算圖片大小 使用  os.path.getsize(filename)  取得圖片大小,並使用  with open(compress_file, "w") as file  寫入壓縮檔案中,做為解壓縮時建立 array 的參考。 2.2/ 將二維的圖片轉為一維 三個 channel 的值不會一樣,所以三個通道必須分開儲存。 一維的圖片比較好操控,而且能夠增加壓縮的效率,所以使用  flatten()  將二維的矩陣轉換至一維。 2.3/ Run-Length Encoding 遍歷矩陣中所有的 pixel ,如果當前 pixel 和上一個 pixel 相等,數量就 + 1,不相等就將當前 pixel 的值和數量寫入 .dat 檔中。 並且利用  \n  來分隔每個 channel 的資料。 2.4/ 計算壓縮率 首先,利用  os.path.getsize(filename)  取得檔案大小。 壓縮率的計算為 原檔案大小 / 壓縮檔案大小,相除之後使用 formatted string 顯示在表格中。 3/ 解壓縮圖片 在  main()  中呼叫  decompress(compress_file)  來將剛才產生的 dat 檔轉換回

s1091530 作業6

圖片
  1. 開發環境 windows11 Python:3.8.13 opencv-python:4.7.0.72 numpy:1.24.2 2. 功能 ● def compress_image(): imread() : 讀取圖片,獲得圖像的寬與高,並將寬和高先寫入txt檔儲存。 cv2.split(image) : 將BGR通道的資料拆分為三個向量。 flattened = channel.flatten() : 將二維向量展平為一維。 執行run-length壓縮步驟: 記錄當前像素值的連續出現次數。 使用迴圈遍歷 flattened 列表中的像素值,從第二個元素開始。 檢查當前像素值是否與前一個像素值相同。 如果是,則表示遇到連續相同的像素值,將 current_count增加 1,以記錄連續出現的次數。 如果不是,則表示遇到新的像素值,將當前像素值和連續出現次數(current_pixel 和 current_count)作為一對(tuple)添加到 compressed 列表中,並更新 current_pixel 和 current_count 的值為新的像素值和 1。 最後將壓縮資訊寫入txt檔案。 ●  def decompress_image(): 從txt檔案讀取寬高資訊。 再來從txt檔案讀取壓縮資訊並還原圖像。 image = np.zeros((height, width, 3), dtype=np.uint8):創建一個大小為 height × width × 3 的零矩陣 image,用於存儲還原的圖像。這裡假設原始圖像是彩色圖像,因此使用 3 個通道。 list(map(int, pixels_counts)) : 將像素值和次數的列表轉換為整數類型。 image[row, col, channel_index] = pixel : 將還原的像素值 pixel 存儲到 image 矩陣的對應位置上。row 和 col 分別表示像素在圖像中的行和列位置,而 channel_index 則表示目前處理的通道。 最後儲存影像。 ●  def calculate_compression_ratio(): 獲取原始圖像大小。 獲取原始圖像大小。 計算壓縮率: compression_ratio = (compressed_size / orig

s1090339 作業 6

圖片
函數 compress_image 接受輸入的 BMP 圖像路徑和壓縮後的 PNG 圖像的輸出路徑。它首先使用 PIL 庫讀取 BMP 圖像,然後將圖像轉換為像素值列表。接下來,它執行 Run-Length 壓縮,計算連續出現的像素值的次數。最後,它將壓縮後的像素值重新構建為壓縮圖像,並保存為 PNG 格式。 壓縮率: img1 =   14,665,254 / 958,486 = 15.3004 img2 =   14,665,254 /    1,213,905  =   12.0810 img3 =   14,665,254 / 963,488  =   15.2210 平均壓縮率 :     14.2008 比較圖