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

2022年6月3日 星期五

s1073523 作業7

 

一、開發環境

  • Window 10
  • Visual studio code 1.42.1
  • OpenCV 4.4.0
  • Python 3.6.8

二、作業說明

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

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

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


三、實作方法 

  1. 輸入要跑的圖片數量與圖片名稱。
  2. 由於原圖太大,將圖片resize,大小為原圖的10分之1。
  3. 將圖片轉灰階,並使用threshold()做二值化。
  4. 將二值化的圖片做erode()與dilate(),讓圖片更清晰,更好的分辨棋子。
  5. 把dilate()後的圖片做Canny(),得到邊緣圖。
  6. 用邊緣圖做HoughCircles()偵測圓圈,minDist、param2、minRadius這三個參數需要一些嘗試,才能找到適合的值。
  7. 把偵測出來的棋子用circle()畫出來。

四、實作圖片

  • IMG_5702.jpg 原圖:24個,偵測:20個
erode()與dilate()結果

IMG_5702.jpg偵測結果

  • IMG_5703.jpg 原圖:31個,偵測:27個
erode()與dilate()結果

IMG_5703.jpg偵測結果
  • IMG_5704.jpg 原圖:31個,偵測:31個
erode()與dilate()結果

IMG_5704.jpg偵測結果



2022年5月27日 星期五

s1073523 作業6

 

一、開發環境

  • Window 10
  • Visual studio code 1.42.1
  • OpenCV 4.4.0
  • Python 3.6.8

二、作業說明

    請設計一個基於Run-Length的壓縮方法,對圖檔作無失真壓縮後儲存成新檔案。
    部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率。


三、實作方法 

  1. 將讀入的圖片的RGB通道分割。
  2. 把3通道變成一維,做rle壓縮,並將壓縮後的值與長寬儲存。
  3. 把壓縮檔解壓,利用裡面的值還原圖片,注意圖片要是np.uint8
  4. 用原圖大小與壓縮大小去計算壓縮率。

四、實作圖片

img1.bmp還原圖
img2.bmp還原圖
img3.bmp還原圖
壓縮率與平均壓縮率
壓縮檔







2022年5月13日 星期五

s1073523 作業5

 

一、開發環境

  • Window 10
  • Visual studio code 1.42.1
  • OpenCV 4.4.0
  • Python 3.6.8

二、作業說明

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

三、實作方法 

  1. 讀取圖片,並將其轉換成HSV。
  2. 找到圖片顏色的上下限。
  3. 把上下限加入inRange中,擷取黃色部分,該部分會呈現白色。
  4. 將擷取的部分與原圖做bitwise_and,黃色部分就會顯現。

四、實作圖片

hsv

mask

最後的output


2022年4月12日 星期二

s1073523 作業4

 

一、開發環境

  • Window 10
  • Visual studio code 1.42.1
  • OpenCV 4.4.0
  • Python 3.6.8

二、作業說明

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

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

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


三、實作方法 

(1)
  • 用灰階的方式讀取圖片
  • 用dft函數作傅立葉轉換,得到原始圖像的頻譜
  • 用np.fft.fftshift將0頻率移到中間(有實部跟虛部)
  • 將實部加入magnitude函數,得到頻譜幅度
  • 將幅度映射到灰階空間[0,255],使其以灰階圖像顯示
  • 將虛部加入np.arctan2函數,得到相位
(2)
  • 製作一個mask,中心為1,其餘為0,保留低頻部分
  • 把dft_shift (np.fft.fftshift的值) * mask,得到低頻的過濾值
  • 再把這個過濾值作逆傅立葉idft,就可以得到平滑後圖像

四、實作圖片


  • 原始圖


  • 頻譜大小

  • 相位角度


  • 平滑後圖像




2022年3月15日 星期二

s1073523 作業3

 

一、開發環境

  • Window 10
  • Visual studio code 1.42.1
  • OpenCV 4.4.0
  • Python 3.6.8

二、作業說明

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

    1. 利用 Sobel Operators 偵測並輸出邊緣成分圖
    2. 設計一個類似素描線條的自畫像圖案。

三、實作方法 

  •  輸入圖片名稱,路徑需到程式中修改。
  •  利用 Sobel Operators 找出x與y的梯度,並利用addWeighted()將其合併。
  •  素描這邊有兩種寫法
    1. 將邊緣成分圖反白,然後做二值化
    2. 將原圖反白,再將其做高斯模糊處理,然後用divide()將邊緣成分圖與模糊處理的圖合併,最後用二值化輸出圖片。

四、實作圖片

  • 邊緣成分圖

  • 素描圖(方法一)


  • 素描圖(方法二)



2022年3月1日 星期二

s1073523 作業2

 

一、開發環境

  • Window 10
  • Visual studio code 1.42.1
  • OpenCV 4.4.0
  • Python 3.6.8

二、作業說明

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


三、實作方法 

1. 輸入圖片名稱,路徑需到程式中修改。

2. 輸入要使用的旋轉方法(1為整張,2為內切圓)。

3. 若選1,會出現一個視窗,操控滑動條旋轉圖片。

4. 若選2,會出現三個視窗,分別是內切圓以外,內切圓內,與合併的可

操控滑動條旋轉圖。

 

四、操作原理

  1. 利用createTrackbar做滑動條,用getTrackbarPos取得滑動條的值。
  2. 利用點到點的距離公式,判斷圖中各像素是在圓內還是圓外,並創兩個空白圖分別儲存圓內與圓外的像素,將圓內的圖片利用getRotationMatrix2DwarpAffine旋轉,最後將圓內與圓外圖合併。

五、實作圖片

整張圖像
整張旋轉
內切圓
圓內

圓外


合併旋轉

2022年2月22日 星期二

s1073523 作業1

一、開發環境

  • Window 10
  • Visual studio 2022
  • OpenCV 3.4.6

二、作業說明

輸入圖片,讓程式判斷此圖片為RGB或灰階,並改變其亮度。若為RGB,就只改變每個像素的R值,若為灰階,就改變灰階的像素值。


三、實作方法 

1. 輸入圖片名稱以及要增加或減少的值,路徑需到程式中修改。

2.若需要灰階圖片,也可以在程式中修改,將RGB轉成灰階。

3.若是值超過255,就設定為255,若低於0,就設定為0。 

4. 顯示出修改後的圖片。

 

四、執行成果 

灰階調暗130
原圖


灰階調亮130



原圖
R像素-130

R像素+130