2019年6月4日 星期二

1051432 作業五

一、作業要求:
請撰寫一個程式,利用數學型態學影像處理運算,計算出所附圖像(共三張),每張圖像中圍棋個數。

二、作業環境:

  • windows10
  • visual studio 2017  
  • opencv 3.4.1
三、程式架構:
  1. 用threshold設定圖像二值化的閥值
  2. 用bitwise_not()進行顏色的反轉
  3. 用morphologyEx、erode、dilate做腐蝕、膨脹和開運算,調整參數到能最有效的分割圍棋邊界
  4. 用findContours找出共有幾個輪廓,就可知道圍棋個數
四、成果展示:
  • 第一張圖片:
  • 結果:22個圍棋(正確為24個)


  • 第二張圖片:
  • 結果:30個圍棋(正確為31個)

  • 第三張圖片:
  • 結果:31個圍棋(正確為31個)

2019年6月3日 星期一

1051515 作業五



 一、作業要求
請撰寫一個程式利用數學型態學影像處理運算,計算出所附圖像共三張每張圖像中圍棋個數。


二、使用的環境

  • Windows 10
  • Python 3.7
  • Opencv 3.4
  • Matplotlib 3.0.1

三、撰寫架構:

  1. 先將圖片讀取成灰階圖。(連續輸入)
  2. 將圖片做GaussianBlur()以消除圖片的雜訊。
  3. 將圖片做開運算(morphologyEx),以消除棋子上的反光。
  4. 將開運算後的圖片做二值化(threshold)。
  5. 對二值化後的圖片以Canny取邊緣,做邊緣偵測。
  6. 以findContours()對第5步的圖片做找邊緣。
  7. 篩選contours,若值太大判斷為2棋子連在一起。
  8. 輸出結果、誤差。
四、執行結果

執行結果





第一張圖片邊緣偵測
第二張圖片邊緣偵測

第三張圖片邊緣偵測

1051529 作業5

一、作業題目
請撰寫一個程式,利用數學型態學影像處理運算
計算出所附圖像(共三張)每張圖像中圍棋個數。

二、開發環境
Windows 10
Visual Studio 2015
Opencv 2.4.13.6

三、解題邏輯
將圖片二值化後,使用侵蝕令相連的棋子點分開,之後計算有幾個分開的面積得到棋子個數。

三、解題細節
1.將讀進來的圖片先轉成小一點的圖片(512x512),並轉成灰階
2.將圖片二值化(棋子為白色區塊)
3.設定侵蝕模板大小 第一張圖:30x30 第二張圖:25x25 第三張圖:30x30
4.進行侵蝕
5.偵測輪廓
6.計算有幾個輪廓區域即為結果
四、執行結果
侵蝕結果圖(test1)

繪在原圖上後(test1)
輸出結果圖(test1)
 侵蝕結果圖(test2)

繪在原圖上後(test2)

 輸出結果圖(test2)
                           
侵蝕結果圖(test3)
                           

 繪在原圖上後(test3)


                           
輸出結果圖(test3)

1043331的作業5

摘要

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

使用環境

  • windows10
  • python 3.6.4
  • opencv 3.4.1
  • pyqt5

程式功能

從檔案路徑選取圖片,並利用數學型態學影像處理運算計算出圖片中的圍棋個數。程式中使用者可輸入欲使用的element size大小,與是否使用 GaussianBlur 與其 kernal 大小。計算結果可以從 cmd 中觀看也可直接從視窗主畫面下方觀看。可以關掉邊緣偵測圖片的彈出視窗來專注於使用物體計算。

實驗結果

實驗結果(其中紅字為最佳或最接近正解之結果)












執行結果

主畫面執行結果圖




















原圖與邊緣偵測後的結果圖











cmd執行結果圖

S1041538的作業五

一、作業題目
請撰寫一個程式,利用數學型態學影像處理運算,計算出所附圖像(共三張)每張
圖像中圍棋個數。

二、開發環境
Windows 10、Python 3.4.6、Opencv 4.0.0、matplotlib 3.0.3

三、解題邏輯
先將圖片二值化後,使用Erosion的技術令其相連的棋子點分開,之後再去計算
有幾個分開的輪廓即可得出棋子個數。

三、解題細節
1.      由於Erosion技術和計算輪廓的技術,在opencv當中都是默認以黑底白物體來判斷,因此在讀進img並二值化完後,我進行了黑白色翻轉的動作(重點程式碼如下)
(thresh, img) = cv2.threshold(im_gray, 128, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)
2.      接著,在使用Erosion技術時,必須設定kernel的形狀大小。這邊由於測試圖三張的棋的重疊程度不太一樣,因此我手動地去更動kernel的大小,並使用200與300兩組大小分別去Erosion,以下是Erosion完的結果
3.      最後一步,去計算輪廓物件的個數,使用到threshold與findContours的技術(重點程式碼如下)
cv2.threshold(img,127,255,cv2.THRESH_BINARY)
cv2.findContours(binary, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
4.      結果呈現


四、過程的截圖
老師給的圖(我重新命名,方便之後跑程式)

圖A,以kernel size  200 和 300,分別跑完的圖

圖B,以kernel size  200 和 300,分別跑完的圖

圖C,以kernel size  200 和 300,分別跑完的圖

2019年6月2日 星期日

1041562 作業5

影像處理概論hw5
1.平台:ubnutu16.04
2.opencv  version:3.4.1
3.編譯方式:
g++ 1041562_hw5.cpp -o 1041562_hw5 -L/usr/local/lib -lopencv_core -lopencv_highgui -lstdc++ -lopencv_imgcodecs -lopencv_imgproc
4.執行方式:
./1041562_hw2 <filename>
結果:











實際
預估
IMG_5702.jpg
24
22
IMG_5703.jpg
31
30
IMG_5704.jpg
31
32



5.實做方式:
a.使用imread讀入灰階影像
b.將影像二極化
c.使用erode消除棋子反光部份
d.使用dilate侵蝕到黑色部份,讓棋子只剩下中心部份
e.使用findContours找出輪廓
f.使用contours.size()輸出棋子個數

1051549的作業5

Morphological Image Processing

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

環境需求

  • windows 10
  • python 3.7
  • opencv 4.0
  • numpy 1.15.1
  • matplotlib 2.2.3

實現方法

主要方法是偵測每個物件的輪廓,計算有輪廓形狀的物件數量,根據輪廓內的面積篩掉棋子上的反光的雜訊
  1. 一開始使用imread(image, 0) ,把讀進來的圖轉成灰階圖
  2. 讓圖像的細節模糊化,用GaussianBlur(),降低雜訊
  3. 再用open = morphologyEx(image, MORPH_OPEN, kernel),用open morphology方法去除周遭的雜訊,這裡我設kernel為(30,30)大小的矩形,可以有效篩掉大多數的棋子上的反光
  4. 將open之後的結果做threshold(open, 0, 255, THRESH_BINARY | THRESH_OTSU),這裡用Otsu’s algorithm偵測閾值,所以一開始初始閾值可以隨便給,之後會再修正
  5. 用sobel’s algorithm,偵測物件的邊緣,以偵測x , y軸的邊緣並取絕對值再疊加兩張軸的圖片
  6. 用findContours(sobel, RETR_LIST, CHAIN_APPROX_SIMPLE)找出所有物件輪廓
  7. 根據findContours找到物件數量,用contourArea()篩選掉剩下的棋子反光雜訊,這裡我以area < 10當作篩選條件,最後統計可能是黑子的數量

運行結果

左圖是原圖,右圖是輪廓偵測完的結果

第一張圖原來是24顆,程式判斷22顆
第二張圖原來是31顆,程式判斷30顆
第三張圖原來是31顆,程式判斷28顆

​