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

2022年6月5日 星期日

s1081515 作業7

作業說明: 

請撰寫一個程式,利用數學型態學影像處理運算(erode(), dilate()等函式),計算出所附圖像(共三張)每張圖像中圍棋個數。
a.      請在部落格呈現經由數學型態學影像處理運算後的圖像,同時要呈現你程式輸出棋子數量的螢幕截圖。
b.     程式不一定可以算出正確棋子數量,越接近正確答案越好!

開發環境:

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

實作方法:

  1. 讀取圖片後,會檢查是否可讀取到圖片內容
  2. 由於 erode及dilate,只能用於經過二值化的灰階圖片。所以先將圖片轉成灰階圖,並利用threshold對圖片進行二值化運算
  3. 經過二值化的灰階圖片代入erode,如此能讓圖片去噪、細化影像和消除毛刺。
  4. 由於 erode 會讓圖片的輪廓變細,因此需要利用 dilate 讓圖片的輪廓恢復正常大小,圖片會較清晰。
  5. 利用 HoughCircles,偵測圖中的圓形個數,圓形個數即為圍棋的個數
  6. 根據圓形的圓心座標及圓半徑畫圓,利用circle函式畫圓。
  7. 使用迴圈,將偵測到的所有圓形畫在圖片上。
  8. 分別印出第一張,第二張和第三張經過侵蝕及膨脹的圖以及偵測到圓形訂畫出的結果圖。

執行方式/畫面:

IMG_5702.JPG:(原圖:24顆圍棋,偵測:23顆圍棋)


IMG_5703.JPG:(原圖:31顆圍棋,偵測:30顆圍棋)


IMG_5704.JPG:(原圖:31顆圍棋,偵測:31顆圍棋)

偵測結果:

參考資料:

  • https://blog.csdn.net/zangle260/article/details/52981008
  • https://blog.csdn.net/weixin_42469716/article/details/102455723
  • https://www.796t.com/post/NHgxaGE=.html
  • https://blog.csdn.net/sinat_36264666/article/details/78849125
  • https://blog.csdn.net/chengyq116/article/details/104562114




2022年6月2日 星期四

s1081515 作業6

 

s1081515 作業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(RL)

        4.最後將其輸出到同一個.dat檔中,開頭會列出該圖的長寬(pixel)              每一個 channel的資訊都分別用"end"做區隔

    Decode:

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

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

        3.Mat一張新的圖片並將讀取的資訊依序填入每個pixel得到沒有失               真的圖像

    計算壓縮率:

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

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

        3.輸出計算結果

執行結果:

                                        解壓縮後得到的結果

壓縮率:
檔案資訊:
.dat檔之內容
(第一行為此圖的長寬(pixel))





















2022年5月15日 星期日

s1081515 作業5

 

作業說明:

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

使用環境/語言:

  • Windows10
  • Visual Studio 2019
  • Opencv-4.3.0
  • C++

實作方法:

  1. 開始執行後,會檢查是否可讀取到圖片內容,若不行,則跳出檢查。
  2. 將圖像從RGB color space轉成HSI 。這樣做圖形處理時,較不會有太多雜訊。
  3. 設定要偵測的顏色的數值範圍(此部分是要設定黃色)
  4. 將第三點設定的數值,使用inRange()
  5. 這樣便可以根據設定的顏色範圍,生成一張二值化的圖(此圖會將目標顏色的區域,設成白色)
  6. 根據二值化的圖白色範圍,重新設定原圖的像素顏色,就可獲得黃色花瓣。

執行方式/畫面:

                                                                          原圖 :


HSI:

二質化 : 
結果 :






參考資料:

  • https://blog.csdn.net/OTZ_2333/article/details/110222799

 

2022年4月15日 星期五

s1081515 作業4


作業說明:

  • 計算輸入圖的離散傅立葉轉換結果,並將頻譜大小與相位角度各以灰階256色圖像方式呈現出。
  • 對圖像利用Gaussian Low-Pass filter處理,輸出平滑後圖像。
  • 程式利用課本的frequency filter步驟者可得滿分,在網頁中將每個步驟結果呈現出。直接套用opencv函數得一半分數。

使用環境/語言:

  • Windows11
  • Visual Studio 2019
  • Opencv-4.3.0
  • C++

程式說明:

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

執行方式/畫面:

                                                       原圖:

頻譜圖:

相位角(phase):

相乘的頻譜大小:

Normalize():

參考資料:

https://blog.csdn.net/xddwz/article/details/110938652






2022年3月21日 星期一

s1081515 作業3

作業說明:

撰寫一個程式,以灰階模式讀取一張圖像 

(a)利用 Sobel Operators 偵測並輸出邊緣成分圖

(b)設計一個類似素描線條的自畫像圖案

使用環境/語言:

  • Windows 11
  • Visual Studio 2019
  • Opencv-4.3.0
  • C++

實作方法:

  1. 讀取圖片後,會檢查是否可讀取到圖片內容,若不行,則出現Error警告。
  2. 利用 高斯模糊,將照片的雜訊去除。
  3. 利用 sobel operator偵測圖片邊緣。
  4. 利用 threshold 函數,將(3)的圖片的黑色部分轉成白色,白色部分轉成黑色
  5. 將圖像印出。

執行方式/畫面:

  • 原圖:

  • 灰階圖(高斯模糊處理過):
  • 邊緣偵測的圖:

  • 仿素描圖:

參考資料:

https://blog.csdn.net/weixin_46196863/article/details/112209430
https://blog.csdn.net/u012566751/article/details/77046445
https://www.cnblogs.com/chenzhen0530/p/14660498.html
https://blog.csdn.net/guduruyu/article/details/81605726
https://blog.csdn.net/u011503970/article/details/18615537
https://docs.opencv.org/4.2.0/d2/d2c/tutorial_sobel_derivatives.html












2022年3月7日 星期一

s1081515 作業 2

 作業說明:

撰寫一個程式,將一張圖像的整張圖像中心內切圓區域,旋轉一個角度(逆時針旋 轉 0 度至 359 度),且能利用滑動條(trackbar) 控制圖片的旋轉角度。

使用環境/語言:

  • Windows10
  • Visual Studio 2019
  • Opencv-4.3.0
  • C++
實作:

1. 讀取圖片

2. 判斷圖片是否存在

3. 若圖片不存在或發生例外時輸出錯誤訊息並結束程式

        4. 輸入想要旋轉的角度

        5. 會分別輸出三種圖:原圖、整張圖像旋轉、中心內切圓區域旋轉

        6. 切下來圓的圖利用getRotationMatrix2D()、warpAffine()進行旋轉的動作

        7. 中心內切圓區域旋轉的圖: 利用每個點座標與圓心之間的距離,判斷是否屬於圓。

        8. 在內切圓內的點座標複製到新mat的一張圖,內切圓外的點座標複製到另外一張圖

        9.內切圓的那圖依照輸入的角度去做旋轉,再將內切圓外的那張圖與旋轉後的內切圓重合

       10.整張圖像旋轉、中心內切圓區域旋轉的圖片皆可用trackbar分別去做旋轉和設定角度

執行結果:

原圖:

整張圖旋轉120度:

內切圓旋轉206度:


參考資料:

https://blog.csdn.net/xingchenbingbuyu/article/details/50719569

https://docs.opencv.org/3.4/da/d6a/tutorial_trackbar.html

https://www.cnblogs.com/wyuzl/p/7865536.html

https://www.itread01.com/content/1549734483.html

https://www.itread01.com/content/1550472847.html

https://blog.csdn.net/guduruyu/article/details/70799804

https://openweather.blogspot.com/2019/09/opencv-clonecopyto-opencvclonecopyto.html










2022年2月23日 星期三

s1081515 作業1

    作業說明:

       1.撰寫一個程式讀取 1 張圖片,將圖中每一個像素的值各加上輸入的數值

           2.如果讀取之圖像為灰階(即channels()==1),則改變每個像素之灰階值

           3.如果輸入圖像是全彩的(RGB),則只改變每個像素的 R 值。

           4.修改後的像素值要介於 0 ~ 255 (注意溢位問題)

    使用環境/語言:

    • Windows10
    • Visual Studio 2019
    • Opencv-4.5.5
    • C++
    執行/程式說明:
        在程式碼內輸入要讀取的檔案名稱,並在執行檔內輸入想要加的像素值,程式會判斷是否為 3 channels 還是 1 channels,如果為 1 channels ,就是真正的灰階圖,反之為3 channels,則是一般RGB圖,而 3 channels 的地方也會判斷說是 3 channels 的灰色圖就會更改GB的值使之便亮或變暗,但是還是灰色的圖。

  執行結果:
            
    一般RGB圖:   
   
    R+200:

    R-200:
    
    3 channels原圖:


   3 channels  +100:

   3 channels  -100:
   
  1 channels 結果與 3 channels 一樣

參考資料:
  •  http://yzucs362.blogspot.com
  • https://www.itread01.com/content/1546304951.html
  • https://blog.csdn.net/qq_43640147/article/details/100813069
  • https://blog.csdn.net/Feeryman_Lee/article/details/101071971
  • https://cloud.tencent.com/developer/article/1470529
  • https://benjaminnl.pixnet.net/blog/post/38930671-opencv-rgb-to-gray