1 枚の舌画像から特徴量を得るまでの処理を定める.本書は v2.7 時点の動作を記録したものであり,コード整理ではここに書いた処理結果を変えないことを合格基準とする(要件定義書 の非機能要件).
入力画像 │ (Image&Calib のみ)色補正 → L*a*b* 画像 ▼ 1. 舌検出 ──────────── 失敗 → "Tongue detection error" ▼ 2. 舌領域抽出(セグメンテーション → 二値化 → 必要なら小領域除去) │ 失敗 → "Tongue segmentation error" ▼ 3. マスク作成・舌の切り出し ▼ 4. 形状特徴の算出 ▼ 5. 領域分割(Chiu 法・拡張 Chiu 法・5 点法) ▼ 6. 領域ごとの色・テクスチャ特徴の算出 ▼ 7. analysis.csv に 1 行追記
Image&Calib モードのみ.舌画像と,同名のカラーチャート画像を使う.
rgb2lab\TongueAnalysis.exe <舌画像> <カラーチャート画像> <出力CSV> を実行し,画素ごとの L*a*b* 値を CSV に得る| 項目 | 内容 |
|---|---|
| モデル | models/Detection_Normal.pb(TensorFlow Object Detection API) |
| 前処理 | 画像を JPEG にエンコード → 256×256 に縮小 |
| 採用する矩形 | スコアが 0.5 を超える検出のうち,最もスコアが高いもの |
| 出力 | 元画像の座標系に戻した舌の矩形 |
| 失敗条件 | 該当する検出が無い,または例外が起きた |
models/ResUNet.onnx で推論する(入力は BGR を 255 で割った値,出力は 2 チャネルのうち 1 チャネル目にシグモイドをかけたもの)RemoveSmallRegionDLL.dll で面積 500 画素未満の領域を除去する(2 回実行.設定が異なる)| 特徴量 | 内容 |
|---|---|
| width / height | 検出した矩形の幅・高さ |
| area | マスクの画素数(舌の面積) |
| topLeftX / topLeftY / bottomRightX / bottomRightY | 検出した矩形の左上・右下の座標 |
マスクを舌の部位ごとに分ける.3 つの方法すべてを実行する.
| 方法 | 名前 | 領域 | 概要 |
|---|---|---|---|
| Chiu 法 | chiu | lateral(舌辺),middle(舌中),tip(舌尖) | 舌尖は下から高さ 20%,舌辺は左右それぞれ幅 20% |
| 拡張 Chiu 法 | exChiu | 上記+root(舌根) | Chiu 法に,上から高さ 20% の舌根を加える |
| 5 点法(自動版) | fiveClick | lateral,root,middle,tip | 舌の輪郭と重心から 5 点法の基準点を自動で求め,そこから得た 8 点で分ける |
python\TongueFeatures.exe <画像> <領域マスク> <色統計CSV> <GLCM CSV> を領域分割の方法ごとに実行する.
| 種類 | 特徴量 | 対象 |
|---|---|---|
| 色統計量 | min,median,mean,max,variance,skewness,kurtosis | 領域 × チャネル(Image: B・G・R,Image&Calib: L・a・b) |
| GLCM(テクスチャ) | contrast,dissimilarity,homogeneity,ASM,energy,correlation | 領域ごと |
画像 1 枚につき analysis.csv に 1 行を追記する.列の並びは 入出力仕様 を参照.