出力画像例: 左から入力画像、繁茂度ヒートマップ画像、4段階離散化繁茂度マップ画像、
グリッド化繁茂度マップ画像、農業試験場指導員の方に行って頂いたアノテーション例
- 本リポジトリでは、アスパラガスの茎葉・擬葉(Pseudo Leaf)の繁茂度マップを簡易に生成・確認するためのコード等を提供します。
- 本研究(本リポジトリの成果物)は、生研支援センター「イノベーション創出強化研究推進事業」(JPJ007097)の一環として開発されました。
- アスパラガスの安定生産のためには、整枝により茎葉を適切な繁茂状態に保つ必要があります。また、アスパラ株の生育状態に合わせて、茎葉の繁茂状態を基に新規の株について植え込む位置を決定したり立茎角度を調整するといった作業を行います。
- 一方で、茎葉の繁茂度は繁茂状態は産地や農家により様々であり、また複合的な観点での判断が必要なため、形式知化や指導が難しく、新規生産者がその判断の部分でつまづき得る形態になっています。
- たとえば、その要因の一つは繁茂度を表現する指標・共通言語が無いことであり、現状は「スカスカ」など曖昧な表現で、主に口語で共有しています。
- 指導員の方にヒアリングした際の情報の一つとして、繁茂度は概ね4段階程度に大別され、その情報を基に茎葉管理を行っている、という前提情報があります。
- そこで上記の問題に対して、スマートフォン等の画像から簡易に繁茂度を自動的に数値化・可視化するためのツールを開発しました。
- このツールは、茎葉の繁茂度を自動的に数値化・可視化し、アスパラガス栽培の専門家である農業試験場の指導員が提供するアノテーション画像と同等の情報を持つ繁茂度マップを画像から推定するためのコア技術の開発を目的として作成しました。
処理名 | 説明 |
---|---|
1. 画像撮影 | 繁茂度推定を行う対象となる入力画像を取得します。 |
2. 有効領域選択 | 繁茂度を取得するための画像上の縦範囲を指定します。 |
3. 茎葉候補領域と背景領域を二値化 | 色情報ベースで茎葉候補領域マスクを取得します。 |
4. 繁茂度計算 | 茎葉候補領域マスク情報を用いて繁茂度マップを推定・計算します。 |
5. 結果画像の出力 | 推定された繁茂度マップについて、結果画像を出力します。 |
結果画像は以下の三種を出力します。
- 繁茂度マップを連続値のヒートマップ画像として出力したもの
- 繁茂度のヒートマップ画像を 4 段階に離散化した画像
- 離散化された繁茂度のヒートマップ画像について、画像グリッド領域毎に統計処理を行った画像
また、各処理の具体的な実装と処理例はleaf_density_calculation.ipynbから確認可能です。
-
OS: Ubuntu 22.04 (Poetry + Pyenv), Windows11 (+ Anaconda)
-
Python: 3.7.7, 3.7.13
-
Windows + Python仮想環境(Anaconda)での動作確認は以下のnotionページのような手順で行いました。ご参考にして頂ければと思います。
git clone git@github.com:teaminaho/pseudo_leaf_density_estimator.git
- クローン先のディレクトリで以下のコマンドを実行して下さい。
pip install -r requirements.txt
python generate_leaf_density_map_images.py INPUT_PATH [オプション]
INPUT_PATH
でパス指定された処理対象の画像ファイルを入力として、繁茂度マップ推定を行い、結果画像を出力します- 出力画像は以下の5つの画像を横方向結合した画像で構成されます
- 入力画像
- 茎葉候補領域マスク
- 繁茂度ヒートマップ画像
- 4 段階離散化された繁茂度ヒートマップ画像
- 4 段階離散化+グリッド後処理を行った繁茂度ヒートマップ画像
--conf-path PATH
: 設定ファイル(TOML 形式)へのパスを指定します。デフォルト値は./conf/conf.toml
です。--output-dir PATH
: 出力画像を保存するディレクトリのパスを指定します。デフォルト値は./data/output
です。ディレクトリが存在しない場合は生成します。--hmin INTEGER
: 画像の切り取り開始の画像縦座標値を指定します。省略した場合のデフォルト値は 0 です。--hmax INTEGER
: 画像の切り取り終了の画像縦座標値を指定します。省略すると自動的に計算されます。--help
: ヘルプメッセージを表示し、終了します。
以下のコマンド例では、サンプル画像に対して、切り取り開始の画像縦座標値を0
、切り取り終了の画像縦座標値を2500
と指定した形で結果画像を生成します。
python generate_leaf_density_map_images.py data/2021/sample_images/20211005_132152.jpg --hmin 0 --hmax 2500
- TOML 形式の設定ファイル内(./conf/conf.toml)に記述されるパラメタについて記述したものになります。
パラメータ名 | 説明 |
---|---|
lch_lower | LCh 色空間での最小値。左から、Lightness、Chroma、Hue に対応。 |
lch_upper | LCh 色空間での最大値。左から、Lightness、Chroma、Hue に対応。 |
hsv_lower | HSV 色空間での最小値。左から、Hue、Saturation、Value に対応。 |
hsv_upper | HSV 色空間での最大値。左から、Hue、Saturation、Value に対応。 |
パラメータ名 | 説明 |
---|---|
grid_size | グリッド分割表示時の、画像横方向の分割数。 |
パラメータ名 | 説明 |
---|---|
kernel_size | blur 処理をかける際のカーネルサイズ。 |
density_min | 擬葉密度を normalize する際に使用する下限値。 |
num_density_bins | 擬葉密度をビン分割する際に、何等分にするかの値。 |
divided_area | 擬葉密度を 4つにビン分割する際の、それぞれの境界値。 |
パラメータ名 | 説明 |
---|---|
k_h_size | 自動 ROI 抽出時に使用されるエッジ抽出アルゴリズムの、縦方向のカーネルのサイズ。 |
serch_area | アルゴリズムを適用させる範囲。縦方向のピクセル値を入力する。 |