顯示具有 #1092hw5 標籤的文章。 顯示所有文章
顯示具有 #1092hw5 標籤的文章。 顯示所有文章

2021年6月4日 星期五

s1071545 影像處理作業 6

 作業說明:

    附件中為三張利用將高度以色彩視覺化後的圖片。請設計一個基於Run-Length的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。

開發環境:

    Window 10

    Anaconda

    VScode

    Python

運行說明:

    先利用f.seek(14),因為bmp的前14格資料我們用不到,再來利用f.read(40)將標頭資訊擷取出來,再來用while將剩下的資料利用f.read(3)讀出並依據RGB存入對應的list中,讀完後利用np.array(list)將list轉換為numpy array並使用cv2.flip進行圖片的上下左右反轉。接下來使用RLE的方法先對每一列中的元素進行壓縮,再將重複的列進行合併,之後輸出成dat檔,格式為

    header:  圖片長、寬

    data: R : 列重複次數、[[顏色編碼、出現次數]、[顏色編碼、出現次數]......]

             G : 列重複次數、[[顏色編碼、出現次數]、[顏色編碼、出現次數]......]

             B : 列重複次數、[[顏色編碼、出現次數]、[顏色編碼、出現次數]......]

    之後再將剛剛輸出的dat檔重新讀入,並且利用長寬資訊進行解壓縮,將還原出的檔案儲存起來。

** 假設檔案名稱為 img1.bmp,則壓縮完的檔案名稱將為img1_ecoding_output.dat,再次解壓縮的圖片檔案名稱為img1_decoding_output.bmp

平均壓縮 : (4.5713373763166294286626236833706 + 2.741916969581021618519227090109 + 4.7789263087695898632877625875292) / 3 = 4.0307268848890803034898711203363

結果畫面:

img1.bmp

(壓縮率: 14322/3133 = 4.5713373763166294286626236833706)

img2.bmp

(壓縮率: 14322/5227 = 2.741916969581021618519227090109)

img3.bmp

(壓縮率: 14322/2999 = 4.7789263087695898632877625875292)

2021年5月24日 星期一

s1062036 影像處理作業5

作業說明:

    附件中的讀.row晶片設計的高度檔案,設計人員無法直接看到相關資訊。利用你所學的Color顏色的知識與處理技術,撰寫      個程式來讀取附件中的讀.row 檔案,將高度資料以圖片(顏色)視覺化呈現出來,讓設計人員可以看到高度相關資訊。

開發環境:
    Window10
    pycharm
    Python3.6
    OpenCV 4.5.2

程式說明:
    
    1.用open()讀取圖片
    2.unpack 取得 width , height ,channel 
    3.每4byte unpack後存入list 
    4.找出list的min(list中第二小的值), max值
    5.將list改成array 再 reshape() 轉成圖片的格式
    6.applyColorMap()轉成對應的顏色
    7.輸出圖片

執行結果:
02

08


10











2021年5月23日 星期日

s1073311影像處理作業5


1. 題目說明

附件中的讀.row晶片設計的高度檔案,設計人員無法直接看到相關資訊。利用你所學的Color顏色的知識與處理技術,撰寫一個程式來讀取附件中的讀.row 檔案,將高度資料以圖片(顏色)視覺化呈現出來,讓設計人員可以看到高度相關資訊。

2. 操作環境

macOS Big Sur
終端機
Python 3.7.3/openCV 4.5.1

3. 方法

1. 用open()讀取圖片
2. 用struct.unpack ()取得 width , height ,channel 
3. 32byte之後每4byte(float)分別struct.unpack並且存入list 
4. 找出list的min(list中第二小的值), max值
5. 將-99999.0改成前面找到的min值
6. 將list改成array並用cv.reshape()轉成圖片的格式
7. 將array裡的value用線性變換映射成0~255的範圍
8. 用cv2.applyColorMap()轉成對應的顏色
9. 用cv2.imwrite()輸出圖片

4. 執行結果

    

    1. 02


      

    

    2. 08


    

    3. 10

    


s1071521 影像處理作業5

 作業說明:

附件中的讀.row晶片設計的高度檔案,設計人員無法直接看到相關資訊。利用你所學的Color顏色的知識與處理技術,撰寫一個程式來讀取附件中的讀.row 檔案,將高度資料以圖片(顏色)視覺化呈現出來,讓設計人員可以看到高度相關資訊。

作業環境:



OS: linux ubuntu20.04
c++ version: c++11
using opencv4.5.2 (check by terminal command "pkg-config --modversion opencv4")
compile command :
    "g++ 1071521_HW5.cpp -o HW5 -std=c++11 `pkg-config --cflags --libs opencv4`"

解說:

藉由讀檔讀出前面32 Bytes 解header,得出width&height,再以4個bytes(float)讀入float指標。
從指標開頭開始讀取數值,凡是讀到-99999.0的數字,藉由0.0/0.0化為nan數值,並順便取得最大最小值。
之後再透過每(1/5)的大小區間去製作新的圖片:
nan 為 紅色
1/5 ~ 2/5 藍色
2/5 ~ 3/5 綠色
3/5 ~ 4/5 黃色
4/5 ~ 5/5 橘色
else 紅色
再將結果輸出為bmp檔案

結果輸出



2021年5月22日 星期六

s1071540 影像處理作業5

 一、作業說明


Color Visualization of Depth Information

附件中的讀.row晶片設計的高度檔案,設計人員無法直接看到相關資訊。利用你所學的Color顏色的知識與處理技術,撰寫一個程式來讀取附件中的讀.row 檔案,將高度資料以圖片(顏色)視覺化呈現出來,讓設計人員可以看到高度相關資訊。


二、作業環境&語言

Windows 10 + Python 3.8.5 
         matplotlib  2.2.2 + numpy 1.20.2


三、方法&步驟

  1. 二進位形式以open()讀取raw檔
  2. struct.unpack()擷取header中的height和width
  3. 將pixel值為-99999的設為0
  4. 取出所有pixel中的最大及最小值
  5. 將所有值分布於0~255中
  6. 使用COLORMAP_JET呈現結果

五、執行結果

        

10:



08:




02:





2021年5月17日 星期一

s1071532 影像處理作業5

    

Color Visualization of Depth Information

附件中的讀 .raw 晶片設計的高度檔案,設計人員無法直接看到相關資訊。利用你所學的 Color 顏色的知識與處理技術,撰寫一個程式來讀取附件中的讀 .raw 檔案,將高度資料以圖片(顏色)視覺化呈現出來,讓設計人員可以看到高度相關資訊。


程式語言:Python 3.7.3 64-bit


開發環境:

  • Windows 10
  • Visual Studio Code
  • OpenCV 4.5.1


實作方法與演算法:


使用 struct.unpack 把東西從二進位檔讀進來,利用讀進來的二維矩陣取最大、最小值(濾掉 -99999.0),之後用白到黑和藍到紅來表示高度從低到高,分別輸出。 

藍到紅的部分是用 hue 的大小表示:0(藍) ~ 120(紅)

 


02


02 (白到黑)


02 (藍到紅)



08


08 (白到黑)


08 (藍到紅)



10


10 (白到黑)


10 (藍到紅)




圖片來源:


    作業內附。


s1071545 影像處理作業 5

 作業說明:

    附件中的讀.row晶片設計的高度檔案,設計人員無法直接看到相關資訊。利用你所學的Color顏色的知識與處理技術,撰寫一個程式來讀取附件中的讀.row 檔案,將高度資料以圖片(顏色)視覺化呈現出來,讓設計人員可以看到高度相關資訊。

開發環境:

    Window 10

    Anaconda

    VScode

    Python

運行說明:

    先利用f.read(32)將標頭資訊擷取出來,再來用while將剩下的資料利用f.read(4)讀出並存進list中,讀完後利用np.array(list)將list轉換為numpy array,讀資料時先不使用np.array而用list是因為使用list存取資料會較np.array快許多。接下來利用min、max取得最小和最大值,而-99999的這個無效值我用min去做取代,再來要轉換成圖片,即為0~255的數值,我先計算D為max - min,再將整個數值平移min,平宜能使整個數值皆為0或以上,在將每個數值去除上D並乘255,這樣就能使數值界為0~255。最後將圖片輸出並於旁邊標示colorbar。

執行畫面:

02.bmp                    02.raw      
08.bmp                    08.raw
10.bmp                    10.raw