松井工務店
AutoCADとVBAで画像解析して粒径分布を出す

AutoCADとVBAで画像解析して粒径分布を出す

松井工務店

まずは、顛末から。

前職での話になるのですが、いつものように「これ誰もできないからやって」という話がきました。

「お客さんから、画像解析ソフトでできないから、こっちで画像解析で粒度分布出してって言われたからお願い」

なぜそうなる・・・

ということで、「なんちゃって画像解析ソフト」を作りました、AutoCADとVBAで。分布もきちんと出た、自分で言うのもなんですが、優秀なソフトでした。

残念ながら、そのVBAのコードは手元にないので、「考え方」を書きます。これに沿ってVBAを書けば、AutoCADで画像解析ができます!

そもそも、やれるという自信がなければ受けるはずもない仕事ですが、AutoCADで計測ってできるんじゃね?みたいなのはあったので、作りました。

あと、前提として、この仕事のためにソフトの購入は不可。

まず、AutoCADの特徴として

・寸法をデータとして書き出せる
・長さだけでなく、面積も書き出せる
・VBAが使える
・レイヤーが使える
・画像をレイヤーに入れられる
・二次元処理が得意

はじめの2つが決め手です。

VBAを書くとき、Excelと違うのが、形状はobjectでなくてentityです。

また、Excel VBAはネットにネタがいっぱいありますが、AutoCADのVBAはほとんどありません。一応、ググって、使えそうな情報はありました。また、「マクロの保存」もありませんので、「自分だったらこういう仕組みにするだろうな」と考えながら作っていきました。

また、すべてVBAにするのは到底ムリなので、手動も大いに活用します。

というか、形状の認識は人間様がやった方が精度が出ます。

では、画像解析の大まかな手順は

・解析したい画像をレイヤーに取り込む(手動)
・コントラストを調整する(手動)
・寸法を実測にあわせるために画像の倍率を調整する(手動)
・測定する粒子の縁を、円もしくは閉じたポリラインで囲む(手動)
・計測したい範囲をマウスドラッグで囲んで選択(手動)
・「なんちゃって画像解析」起動(手動)
・「なんちゃって画像解析」で粒度分布計算
・ヒストグラムの結果をポップアップ画面に表示と同時に結果を保存

「手動ばっかじゃん!」と思った方。実は、広く使われている画像解析ソフト、写真を入力したらそのまま処理してくれるわけではなくて、同じような前処理が必要なんですよ、実は。

学生の時に、大学の研究室で実験の結果処理で粉体の画像解析処理をやってたんですね。で、時を経て約四半世紀(言ってて悲しくなるけど。平たく言えば25年)、市販の画像解析ソフトを使ってみてびっくり!テクノロジーは大幅に進化していますが、画像解析は進化してなかった・・・ orz

もちろん、AIとかで学習して自動でできる、測定機器とセットで使われる高級なものもあるけれども、普通に使うものというのは、それ以上もそれ以下もない、ということですね、若干の違いはあるけれど。

ということで、どういう風に画像解析がされるのかというのはわかっていたので、それを作りました、ということです。

解析対象の写真というのはSEMで撮影したもので(なのでちゃんと基準スケールは写っている)、粉体のほかに映り込んでいるものがあって、それが処理画像では粉体に非常に似ているので、市販ソフトでは、対象物の分離がすごく難しい。

じゃあ、市販の画像解析ソフトは使えないか、というとそうではなくて、使える写真は、きわめてきれいに、粉体だけが映ったものだけ。

それは、市販のソフトがダメなわけでなくて、そもそもそういう前提で作られているから、その値段で販売されているわけで。

今回の写真は、人間が見ればメッシュと粉体の区別はつくけれども、ソフトでは認識できないので、粉体だけを抽出する必要がある。

で、高級なソフトはAIとかを使いますが、松井工務店ではAIより高級な「人間様」の力を借りることにしました。「借りる」と言っても本人なので、「駆使することにした」と言う方が正確ですね。

ということで、プリ処理は人間様が、粉体を認識し、円またはポリラインで囲んでいくことにします。

「そんなので、精度はどうなんだ!」という声も聞こえてきますが、そもそも「エッジのないものの輪郭を抽出する」こと自体、聞こえは悪いですが「いいかげんにしかできません」。試しに、何かの画像をペイントなどで開けて、コントラストをいじってみて下さい。おわかりになると思います。写真だって、厳密な話をすれば、光の回折があったりピンぼけもある、レンズの歪みもあれば、奥行きもある。もともとそういう誤差が含まれたデータなので、それを考慮して「精度」を考えなきゃいけません。

それと、粒度分布の計測なんて、機械を使っても実はゴホンゴホン。

輪郭を決める作業は、人によって差が出やすいので、はじめにいくつか試してみて、セットする数値をあらかじめ決めておきます。そうすることで、一回一回コントラストを調整してから画像解析をする、という手間を省くことができます。

そうやって輪郭を決めた画像に対して、AutoCAD側で円や閉じたポリラインで囲ってやります。粒径設定の基準は「同じ面積を持つ円の径」なので、それを念頭に置いて作業します。

囲んだら、範囲を四角で囲み、選択します。

そして、ここからがVBAの出番です。

・選択されたもの(entity)をEachを使って、(確か)Entity.Areaで面積を書き出す。
・書き出された面積から、相当半径を計算
・相当半径をソートする(最大・最小値を表示するため)
・一番頻度が大きい分画が、メッセージウィンドウの表示で2行にならないように、一番頻度の多い分画での最大表示が20になるように、他の分画を比例で配分する
・四捨五入すると「0」になってしまう分画については「値がある」ことを示すために、1つ配分する
・集計が終わったら、メッセージウィンドウに「最大値、最小値、サンプル数、ヒストグラム」が表示される(チェックのため)
・メッセージウィンドウの内容と、個別の粒径がテキストファイルに書き出される

これをVBAで書けば、AutoCADで画像解析をして粒度分布を求めることができます!

こんな「なんちゃってシステム」でやりましたが、計測は結構精度がよかったらしく、分布の傾向もわかって、お客様にはすごく喜ばれました!

サンプリング数ですが、計測器メーカー推奨は、少なくとも一万個はサンプリングしてください(もちろん自動なので、一万個準備するだけ)、とのことだけど、「なんちゃって画像解析」で試してみたところ、(あくまで「なんちゃって」では) 200個で傾向が見えることがわかった。プリ処理であらかじめ異常値をはじいたりするのがよかったんじゃないかと思う。

まとめると、

まず「うちでできないことができるか」で、それはクリア。

次に分布の傾向が見られるか、これもクリア。

その次が、今まで撮りためてたものの処理をして欲しい、で、これも、使いやすくしてあったのでクリア。

で、傾向がしっかり出たので、この方法、精度でオッケー、ということでした!

というわけで・・・

便利ですね、VBA!

便利ですね、AutoCAD!(←これを強調したい!)

では!

(この「なんちゃって画像解析」、計測案件が結構あったので、大活躍しました!)

この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
松井工務店

面白いと思ったら、スキと一緒にぜひサポートお願いします。励みになります!

松井工務店
医薬・化学プラントのプロセス/ケミカルエンジニア、流体解析。CAEソフト(主に熱流体)の技術営業(ソリューション営業)とテクニカルサポート、プラントエンジニアリング、プロセスシミュレータ。仕事は楽しくやれる体質。