顯示具有 s1073522 標籤的文章。 顯示所有文章
顯示具有 s1073522 標籤的文章。 顯示所有文章

2022年6月8日 星期三

s1073522 作業 7

 一、作業說明                                    

請撰寫一個程式,利用數學型態學影像處理運算(erode(), dilate()等函式),計算出所附圖像(共三張)每張圖像中圍棋個數。

A.         請在部落格呈現經由數學型態學影像處理運算後的圖像,同時要呈現你程式輸出棋子數量的螢幕截圖。

B.        程式不一定可以算出正確棋子數量,越接近正確答案越好!

二、開發環境

Ø  Windows 11

Ø  Pycharm

Ø  Python 3.9

Ø  OpenCV - 4.5.5.64

三、實作方法

  1. 讀取圖片。
  2. 將圖片做resize(fx=0.25, fy=0.25)
  3. 設定kernel size5*5
  4. 利用erode()處理圖片。
  5. 利用dilate ()處理圖片。
  6. 利用Canny ()偵測影像邊緣。
  7. 透過HoughCircles()找出圖片中的圓形物體,並用circle()圈出來。

四、執行結果:



圖一邊緣偵測

 圖一偵測圓形



 圖二邊緣偵測



 圖二偵測圓形



 圖三邊緣偵測



    圖三偵測圓形



    結果截圖






2022年6月2日 星期四

s1073522 作業 6

 一、作業說明                                    

請設計一個基於Run-Length的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。

二、開發環境:

Ø  Windows 11

Ø  Pycharm

Ø  Python 3.9

Ø  OpenCV - 4.5.5.64

三、實作方法

  1. 將   header 資訊讀取出來
  2. 將所有   pixel 值存放在   list 
  3. 讓每一   pixel 之   RGB 分別與前一   pixel 之   RGB 比較,用三個   list 儲存各   pixel 的   RGB 分布
  4. 分別用   maxRmaxGmaxB 儲存最大的數量
  5. 分別算出算出至少需多少   bytes 儲存數字
  6. 存檔時,用   to_bytes() 將每個顏色數量轉成對應的   byte 數儲存
  7. 壓縮檔案儲存為   imgX_compress.bin

四、執行結果:

圖一原圖


 

圖一解壓縮後結果圖


 

圖二原圖


 

圖二解壓縮後結果圖


 

圖三原圖


 

圖三解壓縮後結果圖


 

壓縮率

 


  圖一壓縮率 : 14322 / 4168 = 3.436 

圖二壓縮率 : 14322 / 5369 = 2.667 

圖三壓縮率 : 14322 / 3982 = 3.596 

平均壓縮率 : (3.436 + 2.667 + 3.596) / 3 = 3.233

 

程式執行結果



2022年5月15日 星期日

s1073522 作業 5

 一、作業說明

撰寫一個程式將所附圖像flower.jpg的黃色花瓣區域擷顯示出來。

二、開發環境

l   Windows 11

l   Python 3.9

l   OpenCV - 4.5.5.64

三、實作方法

  1. 利用 imread 函數、cv2.COLOR_BGR2HSV 參數讀取 HSV 格式圖片。
  2. 設定黃色的 lowerbound 及 upperbound 
  3. 利用 inRange 函數設定 mask
  4. 利用 bitwise_and 函數將每個 pixel 與原圖做 AND,得到結果

四、程式使用方法

1. 程式會跳出三個視窗,分別為原圖、遮罩黃色花瓣區域 

五、執行結果

      1. 原圖


      2. 遮罩

      3. 黃色花瓣區域















    2022年4月12日 星期二

    s1073522 作業4

    一、作業說明

    請撰寫一個程式,讀取一張256色灰階圖像。

    (1) 計算輸入圖的離散傅立葉轉換結果,並將頻譜大小與相位角度各以灰階256色圖像方式呈現出。

    (2) 對圖像利用Gaussian Low-Pass filter處理,輸出平滑後圖像。

    二、開發環境

    l   Windows 11

    l   Visual Studio 2017

    l   OpenCV - 4.5.5

    三、實作方法

    1. 頻譜大小與相位角度
      1. 使用 dft() 進行傅立葉轉換
      2. 使用 split() 分離虛實部
      3. 使用 magnitude() 生成頻譜
      4. 使用 phase() 生成相位圖
    2. Gaussian Low-Pass filter
      1. 將圖片大小乘兩倍做 DFT,除原圖外其餘部分填0
      2. 使用 for 迴圈,每個位置乘上 pow(-1, i + j)
      3. 使用 dft() 進行傅立葉轉換
      4. 使用 split() 分離虛實部
      5. 使用 multiply() 將實部與虛部分別乘上 Low-Pass filter
      6. 使用 merge() 將虛實部合併
      7. 使用 idft() 將圖片轉回
      8. 使用 for 迴圈,將轉回的實數部分每個位置乘上 pow(-1, i + j)
      9. 將圖片裁切為 1/4

    四、執行結果

    輸入原圖


    padded 0


    mul pow(-1, i + j)

    (有人的陰影但不明顯)

     amplitude


     angel


    Gaussian Low-Pass filter

    實部 multiply Low-Pass filter


     

    轉回原圖並裁切 1/4

    (嘗試很久都轉不回來QQ)

     












     

     

    2022年3月24日 星期四

    s1073522 作業 3

     一、作業說明

    撰寫一個程式,以灰階模式讀取一張圖像imread(path, IMREAD_GRAYSCALE)

    A.           利用Sobel Operators 偵測並輸出邊緣成分圖。

    B.           設計一個類似素描線條的自畫像圖案。

    二、開發環境

    l   Windows 11

    l   Visual Studio 2017

    l   OpenCV - 4.5.5

    三、實作方法

    1.     邊緣成分圖

                              i.          imread 函數、IMREAD_GRAYSCALE參數讀取灰階圖片。

                            ii.          Sobel 函數分別讀取xy軸方向梯度

                          iii.          addWeighted 函數以等比例相加xy方向,以變成邊緣成分圖。

    2.     類似素描線條的自畫像圖案

                              i.          GaussianBlur 函數取得雜訊。

                            ii.          addWeighted 函數以5:-4的比例將圖片銳利化。

                          iii.          threshold 函數將圖片二值化。

    四、程式使用方法

    1.         程式會跳出兩個視窗,分別為邊緣成分圖類似素描線條的自畫像圖案 

    五、執行結果

    1.         邊緣成分圖



            2.         類似素描線條的自畫像圖案