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

2022年6月7日 星期二

s1081502 作業7

作業說明:

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

開發環境:

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

程式功能:

  • 讀入三張圖片,並轉成灰階
  • 使用threshold()將圖片進行二值化處理
  • 使用resize()將圖片縮小
  • 對圖片使用 erode() 後再 dilate()
  • 使用HoughCircles()計算圖片裡有多少圓形
  • 最後將辨識到的圓形以圓圈和圓心標示在原圖上並輸出。

執行結果:

 erode() 後再 dilate():  
圖一

圖二

圖三

以圓圈和圓心標示:
圖一

圖二

圖三

輸出結果:


2022年6月2日 星期四

s1081502 作業6

作業說明:

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

開發環境:

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

程式功能:

壓縮:

  • 將讀入的圖片透過split()分割成三個channel。
  • 再將三個channel在每個點的值,分別存放在b,g,r的三個vector中。
  • 之後再對b,g,r做Run-length encoding。
  • 最後將結果輸出到同一個.dat檔中,並在b,g,r中間用"next"做間隔。
解壓縮:
  • 將壓縮後的.dat檔讀入。
  • 將每個channel的資訊存下來。
  • 最後宣告一個新圖片,將存取的資訊放入每個pixel。
計算壓縮率:
  • 使用stat()來讀取檔案資訊。
  • 計算壓縮率 = 原圖大小/壓縮檔大小

執行結果:

解壓縮後輸出的圖片:




壓縮前後檔案內容比較:

壓縮率與平均壓縮率:

2022年5月18日 星期三

s1081502 作業5

作業說明:

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

開發環境:

  •       Window10   
  •       Microsoft Visual Studio 2017
  •       OpenCv 4.5.5

程式功能:

  • 輸入欲讀取圖片的名稱或路徑 。
  • 將圖像從RGB color space轉成HSI color space減少雜訊。
  • 設定要偵測的顏色的數值範圍(黃色)。
  • 代入inRange函式生成一張二值化的圖
  • 將二值化的圖與原圖做比對,將原圖中二值化圖為黑色的區域轉成黑色,白色區域不變。
  • 最後得到黃色花瓣。

執行結果:

原圖

HSI

二值化

結果





2022年4月14日 星期四

s1081502 作業4

作業說明:

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

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

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

(程式利用課本的frequency filter步驟者可得滿分,在網頁中將每個步驟結果呈現出。直接套用opencv函數得一半分數。)

開發環境:

  •       Window10   
  •       Microsoft Visual Studio 2017
  •       OpenCv 4.5.5

程式功能:

  • 輸入欲讀取圖片的名稱或路徑
  • 使用imread(path, IMREAD_GRAYSCALE)以灰階模式讀取一張圖像 
  • getOptimalDFTSize()找到圖片的最佳尺寸
  • copyMakeBorder()以0填充圖像邊界
  • 用dft()進行離散傅立葉轉換
  • 分離通道後用magnitude()和phase()得到頻譜圖和相位角
  • 透過課本公式先得到Gaussian Low-Pass filter的圖
  • 將它與前面傅立葉轉換的結果相乘再用idft()取逆傅立葉轉換
  • 分離通道後用magnitude()得到平滑後圖像

執行結果:

原圖

頻譜圖

相位角

Gaussian Low-Pass filter

平滑後圖像




2022年3月21日 星期一

s1081502作業3

作業說明:

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

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

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


開發環境:

  •       Window10   
  •       Microsoft Visual Studio 2017
  •       OpenCv 4.5.5

程式功能:

  • 輸入欲讀取圖片的名稱或路徑
  • 使用imread(path, IMREAD_GRAYSCALE)以灰階模式讀取一張圖像 (0)
  • 透過GaussianBlur將圖片模糊處理、去除雜訊 (1)
  • 透過Sobel operator計算出x,y方向梯度
  • 再透過addweight合併兩個方向梯度(2)
  • 最後將邊緣成分圖反白得到素描圖(3)

執行結果:

(0)以灰階模式讀取一張圖像

(1)透過GaussianBlur將圖片模糊處理、去除雜訊

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

(3)將邊緣成分圖反白得到素描圖


2022年3月8日 星期二

s1081502 作業2

 作業說明:

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


開發環境:

  •       Window10   
  •       Microsoft Visual Studio 2017
  •       OpenCv 4.5.5

程式功能:

  • 輸入欲讀取圖片的名稱或路徑
  • 輸入想要使用的模式,輸入a為旋轉整張圖像,b為旋轉中心內切圓區域
  • create一個trackbar(範圍0~359)
  • 判斷使用者輸入的模式後,先找出圖片中心點,再透過getRotationMatrix2D得到旋轉矩陣
  • 接著再使用warpAffine得到旋轉後的圖片
  • 如果模式為b,則先判斷長短邊,找出內切圓,接著做三個步驟
  • 1.從圖中切出內切圓並旋轉它
  • 2.把圖中內切圓部分挖空
  • 3.把前兩個步驟的圖片合起來

執行結果:

                                                                       

原圖

a模式旋轉150度

b模式旋轉100度



2022年2月23日 星期三

s1081502 作業1

作業說明:

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


開發環境:

  •       Window10   
  •       Microsoft Visual Studio 2017
  •       OpenCv 4.5.5

程式功能:

  • 輸入欲讀取圖片的名稱或路徑
  • 輸入欲改變的數值
  • 判斷是灰階圖還是彩圖
  • 如果是灰階圖則改變圖片每個像素的灰階值
  • 如果是彩圖則改變圖片每個像素的R值
  • 並判斷改變的數值,並把數值控制在0~255
  • 輸出改變後的圖片

執行結果:


      原始圖片         灰階值+100      灰階值-100




     原始圖片            R值+100           R值-100