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

2022年6月6日 星期一

s1081543 作業7

 作業說明:

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

開發環境:

  •       Window10   
  •       Microsoft Visual Studio 2019
  •       C++
  •       OpenCv 4.5.5

程式說明:

    1.將圖片使用灰階的形式讀入

    2. 使用threshold()將圖片進行二值化處理

    3.因為圖片太大了所以將圖片進行resize()

    4.對圖片使用 erode() 後再 dilate()

    5.用HoughCircles()計算圖片裡有多少圓形

    6.將便是到的圓形畫在原圖上並輸出

               

執行結果:

    偵測之結果

        
                圖一侵蝕後再膨脹 


圖一結果(實際為24顆)

  圖二侵蝕後再膨脹 

圖二結果(實際為31顆)

圖三侵蝕後再膨脹 

圖三結果(實際為31顆)




2022年5月31日 星期二

s1081543 作業6

 作業說明:

  • 請設計一個基於Run-Length的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案,並計算三張圖的平均壓縮率

開發環境:

  •       Window10   
  •       Microsoft Visual Studio 2019
  •       C++
  •       OpenCv 4.5.5

程式說明:

    Encode:

        1.將讀入的圖片使用split()把三個channel分離並

           存入vector中

        2.接下來將分離出的三個cahnnel從二維降成一

           維,也將其分別存入不同vector

        3.對每個一維的陣列個別做Run-length encoding

                ex:11122333 ----> 3,1,2,2,3,3

        4.最後將其輸出到同一個.dat檔中,每一個 

           channel的資訊分別用"end"做區隔

    Decode:

        1.將壓縮後的.dat檔讀入

        2.將每個channel的資訊個別存取

        3.Mat一張新的圖片並將讀取的資訊依序填入每個

           pixel得到無失真的圖像

    計算壓縮率:

        1.使用stat()來取的檔案的資訊

        2.計算 壓縮率 = 原圖大小/壓縮檔大小

        3.輸出計算結果

               

執行結果:

       解壓縮之結果

(因圖片太大張有使用resize()調整輸出大小)






壓縮率



檔案資訊


.dat檔內容





2022年5月14日 星期六

s1081543作業 5

 作業說明:

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

開發環境:

  •       Window10   
  •       Microsoft Visual Studio 2019
  •       C++
  •       OpenCv 4.5.5

程式說明:

    (1)

  1. 輸入圖片名稱或路徑(如要輸入名稱請把圖片和.cpp檔放一起)
  2. 將圖片以RGB形式讀取
  3. 利用公式自一個RGB圖轉換為HSI形式的函數
    • 3.1公式:
  4. 自行設定黃色的區域(上限&下限)
    • 4.1參考圖:

  5. 使用inrange()將圖片二值化(上下限中設定為白色,其餘為黑色)製作Mask
  6. 使用for迴圈將原圖Mask中白色的部分保留得出結果

執行結果:

原圖




HSI



二質化



結果





參考資料:

2022年4月14日 星期四

s1081543作業 4

 作業說明:

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

  • 對圖像利用Gaussian Low-Pass filter處理,輸出平滑圖像。


開發環境:

  •       Window10   
  •       Microsoft Visual Studio 2019
  •       C++
  •       OpenCv 4.5.5

程式說明:

    (1)

  1. 輸入圖片名稱或路徑(如要輸入名稱請把圖片和.cpp檔放一起)
  2. 以灰階模式讀取圖片
  3. 將圖片進行padding(長和寬都是兩倍)
  4. 定義傅立葉轉換後要存取實部和虛部的地方
  5. 用merge()合成起來
  6. 進行dft()
  7. 用split()分離出實部和虛部
  8. 使用magnitude()和phase()算出頻譜圖和象位角
  9. 因為此時的値無法在電腦上顯示出來因此進行log(1 + M)的運算
  10. 將兩張圖進行象限交換的處理令最大值在圖片中中心後用normalize()再進行輸出
    (2)
  1. 將padding後的圖片每個點乘上pow((-1), (x + y))
  2. 進行dft()
  3. 利用公式計算filter(D0設為50)  H
  4. 將傅立葉轉換出的實部和虛部個別乘上H後合成形成G
  5. 將G進行逆傅立葉轉換idft()
  6. 分離出實部後將其normalize()得出模糊後的圖

執行結果:

                                      原圖


以灰階讀取並padding後

將基數點乘上-1

頻譜圖

像位角

H

G

結果



公式


























參考資料:

2022年3月22日 星期二

s181543 作業 3

 作業說明:

  • 撰寫一個程式,以灰階模式讀取一張圖像
  • (a)利用 Sobel Operators 偵測並輸出邊緣成分圖 
  • (b)設計一個類似素描線條的自畫像圖案。。


開發環境:

  •       Window10   
  •       Microsoft Visual Studio 2019
  •       C++
  •       OpenCv 4.5.5

程式說明:

  1. 輸入圖片名稱或路徑(如要輸入名稱請把圖片和.cpp檔放一起)
  2. 以灰階模式讀取圖片
  3. 先利用高斯模糊去除雜訊
  4. 再使用Sobel Operators偵測x以及y的梯度
  5. 最後將兩張圖進行合成形成邊緣成分圖(a)
  6. 將邊緣成分圖利用threshold函式將其二值化
  7. 再將二值化後的圖進行高斯模糊
  8. 最後把它和邊緣成分圖以不同比例合成
  9. 呈現出有素描感的圖片(b)

執行結果:

原圖以灰階讀取定高斯模糊後









邊緣成分圖





素描圖








參考資料:

2022年3月8日 星期二

s1081543 作業 2

 


 作業說明:

  • 將一張圖像用兩種方式旋轉(a)整張圖像,(b)中心內切圓區域,旋轉一個角度(逆時針旋 轉 0 度至 359度)
  • 利用一個滑動條(trackbar)控制旋轉角度。


開發環境:

  •       Window10   
  •       Microsoft Visual Studio 2019
  •       C++
  •       OpenCv 4.5.5

程式說明:

  1. 輸入圖片名稱或路徑(如要輸入名稱請把圖片和.cpp檔放一起)
  2. 創造兩個window並將其附加trackbar
  3. 一個視窗是以圖片為中心整張旋轉
  4. 另一個也是以圖片中心旋轉,但只旋轉其內切圓的部分
  5. 在視窗顯示期間持續偵測是否有拉動trackbar
  6. 如果有,就呼叫其對應的 call back function 來完成任務
  7. 旋轉整張圖片的功能是使用 getRotationMatrix2D 計算出旋轉矩陣在使用 warpAffine 來對圖片進行處理
  8. 內切圓則是先計算出半徑後再將圖片分割成內切圓及非內切圓的部分,再利用第七點的方式對其旋轉,最後再將兩張圖合成
  9. 最後等使用者輸入 waitKey(0) 來中止程式

執行結果:

原圖





內切圓旋轉





整張圖旋轉






參考資料:



2022年2月23日 星期三

s1081543 作業 1

 作業說明:

         撰寫一個程式讀取ㄧ張圖片,將圖像中每一個點像素的值各加上一個數值。如果輸入 圖像是灰階圖像,改變每個像素的灰階值;如果輸入圖像是全彩圖像(RGB),則只改變 每個像素的 R 值。 注意修改後像素值溢位 Overflow 問題(像素值介於 0 與 255 之間)。


開發環境:

  •       Window10   
  •       Microsoft Visual Studio 2019
  •       C++
  •       OpenCv 4.5.5

程式說明:

  1. 輸入圖片名稱或路徑(如要輸入名稱請把圖片和.cpp檔放一起)
  2. 輸入欲修改的數值
  3. 先透過圖片channel數判斷是否為灰階圖片
  4. 若channel數為1,代表圖片為灰階,則修改其亮度
  5. 若channel數為3,再判斷整張圖片的B, G, R值
  6. 若全都相等,則此圖片為灰階,修改其亮度
  7. 若有不相等,則此圖為一般RGB圖,修改其R值
  8. 輸出結果

執行結果:


左圖為加上70後


左圖為減去70後


左圖為加上90後


左圖為減去90後