---
# System prepended metadata

title: ML做番茄熟度分類
tags: [yolov5]

---

目標: 透過紅黃橘綠顏色比率去分類番茄熟度，如下
![](https://hackmd.io/_uploads/SyXB4-2jn.png =500x300)
![](https://hackmd.io/_uploads/SySP4bhsh.png =500x300)

## 資料蒐集
使用從[本文](https://hackmd.io/hZYWXtyUTT-ebSYV16KNIQ)獲得的圖片
![](https://hackmd.io/_uploads/SkUKGZ3o3.png)


## 特徵擷取
利用**色度分割**來擷取我們要的特徵
1. 輸入色彩影像為RGB影像
2. 根據HSV模型，設定色彩範圍
3. 將RGB影像轉換成以HSV模型表示
4. 若HSV值落在範圍內，則保留輸出的值，否則輸出0

<font color="red">HSV色彩模型與人類描述色彩的方式接近，因此是理想的色彩影像處理工具。</font>
### HSV色彩空間
* Hue（色相）
* Saturation（飽和度）
* Value（明度）
![](https://hackmd.io/_uploads/SykYHb3i3.png =250x250)

使用python來操作，利用opencv中的mask來進行分割，而番茄的的HSV顏色區間
使用[本論文](https://ieeexplore.ieee.org/document/9260129?denied=)提供的下圖，作為分割的上下界依據
![](https://hackmd.io/_uploads/ByFSvWnoh.png =400x250)

![](https://hackmd.io/_uploads/H1bmDZhsh.png =400x400)

提取各顏色與原圖像素比，並取小數後四位，再手動label訓練集的熟度種類
![](https://i.imgur.com/oZzYj0L.png)
![](https://i.imgur.com/VFrFGac.png)
![](https://i.imgur.com/wc08W4E.png)
![](https://hackmd.io/_uploads/BkKiYZhs3.png)
![](https://hackmd.io/_uploads/HJPOqWno3.png =500x600)

結果輸出: CSV檔
![](https://hackmd.io/_uploads/rJjfoW2on.png =500x600)


## 機械學習
使用matlab classification learner進行機械學習

讀取我們完成的CSV檔，並將資料最後欄位的目標分類的屬性改成categorical
![](https://hackmd.io/_uploads/SymSn-hoh.png =500x100)

使用5-fold cv
![](https://hackmd.io/_uploads/ByLshZ2o3.png )

選擇all 使用所有算法進行訓練
![](https://hackmd.io/_uploads/H1cb6-hj2.png)

以SVM為例的混淆矩陣
![](https://hackmd.io/_uploads/SyeOabhin.png)

## 結論
* SVM跟Navie Bayes適合用來訓練此番茄辨識模型。
* 從混淆矩陣中可以看出與我們人類思考的方式相同的關係,Imature跟Break都是偏綠的，而Pre-harvest跟Harvest都是偏紅的所以可以重其中觀察出兩者搞混的情況是最多的，而Break跟Pre-harvest之間也是較為相近的，但比前兩種的差異較明顯能判別，因此搞混情況是次多的。

## 未來期望
* 當初訓練模型時沒有想到會拿來做這個，能使用polygon的影像辨識模型來獲得去背狀態的番茄，或是尋找其他方法去背，那相信效果會來的更好。
* 數據集的尋找，網路上對於單純番茄的資料集十分的少，且品質參差不齊，若有閒可拍攝更多更好的照片，來增加數據集的品質和數量。



