PR

【ImageJ】閾値設定したのに面積値が変わらない?1か所だけ確認。

imagej-threshold-values-are-not-reflected-correctly-eyecatch

 今回は、面積に関わらず、
ある一定の閾値設定を実施したのに、
その閾値設定どおりに判定してくれない問題
を解消する方法の紹介です。

 具体例としては、
題名にある通り、例えば、画像上の輝度を30で切って、
30より大きい輝度だけ選択します。

 その状態だと、30より大きいピクセルは赤く選択された状態になりますよね。
その赤い選択された状態の面積が求めたい場合です。

 今回紹介する設定が正しくないと、
実は30で閾値を設定してもしなくても「面積が変わりません。」
これ結構まずいですよね。
その設定になっていたら全部やり直しになってしまいます…

 設定が正しいかすぐに確認する方法についてもご紹介するので、
念のためご自身のImageJの設定がどうなっているか確認してみるのもオススメです。

この記事を読むことでわかること

ImageJで閾値設定して正しく面積値を求める方法がわかる。

自己紹介

東証一部上場企業でサラリーマンしてます。

主に工場(生産現場)で使用する検査装置のアプリケーション開発してます。

ヒトの作業を自動化して簡略化するアプリケーションを日々開発中。

転職に成功して現在は超大手企業でシステム系の開発をしています。

Youtubeチャンネルにさまざまな動画を上げています

↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓

注意

本ブログはアフィリエイトを用いた広告を掲載しています。

チェックボックス1つ設定がおかしいとこうなる。

 冒頭でもお伝えしたように、輝度の閾値を設定しているのに、
面積が変わらない…という実例を参考までに載せておきます。

 まず、このような画像を用意します。

Black-and-white-images-of-screws

 例えば、この画像の輝度の閾値を50とするとこうなります。

 画面上の赤い部分が、0~50の輝度だと示されています。
この0~50の輝度の面積を求めたいなら、どうすればいいでしょうか?

 おさらいですが、面積を求めたいのであれば、
Measureをすればよかったですね?

 狙ったところの面積を求める方法は以前のこの記事に記載しています。

狙った色の面積値を求める方法について解説しています。

 というわけでAnalyzeタブからMeasureを押すと、面積が表示されます。

 もし、これで出てきたResultsのウインドウの中にAreaという項目が無かったら、
面積を測定していません。
測定項目を追加する必要があります。

 測定項目の追加方法は、Analyzeタブから、Set Measurementsを選ぶことで、
チェックボックスがたくさん表示されるウィンドウが表示されます。

imagej-set-measurements

 緑色で下線を引いたところのように、Areaにチェックを入れることで、
Measureボタンを押したときに面積が表示されます。

 さて、面積のお話に戻りますが、
さきほどのネジの画像の0~50の輝度で閾値を設定した場合の面積値は、
5236となりました。

 それでは、少し閾値を厳しくして、0~30の輝度を閾値として設定してみましょう。
すると、このようになります。

 輝度の閾値を0~30としたことで、赤い部分が減っているのがわかります。
いったん0~50の輝度を閾値とした場合の画像と並べてみましょう。

左側が輝度0~30を閾値に設定。右側が輝度0~50を閾値に設定。

 こう見てみる一目瞭然ですね。
右側のほうが閾値が0~50なので、左よりも緩い閾値になっています。
では、面積はどうなるでしょうか?
輝度0~30を閾値とした場合の面積値は、以下のようになりました。2719です。

 輝度0~30を閾値とした場合の面積は1つ上に表示されている5236なので、
それに対する2719で大体半分くらいになっているイメージですね。

 ただ、こうなるのが普通かと思いますが、
設定のチェックが1つ入っていないだけでこの結果が異なります。

 具体的には、こうなります。

 下二つの273280がそれぞれ、0~30の輝度を閾値として面積値を測定したものと、
0~50の輝度を閾値として面積値を測定したものです。
値がとんでもないことになっていますよね。

ImageJで閾値設定を反映させるのはここだ!

 それでは、本題ですが、
「閾値設定しているのに、面積値が変わらない…」
そんな場合は、こちらを確認してください。Analyzeのset Measurementsです!

 実はさっきちらっとお見せしたあの画面に答えが書いてあります。

 このLimit to thresholdという項目にチェックが入っていると、
設定した閾値を適用してMeasureが動作します。

 逆にLimit to thresholdにチェックが入っていないと、
どんなに閾値をいじっても出てくる値は変わりません…


じつはSet Measurements以外でもパッとわかる方法2つ

 先ほどSet Measuremetsのウインドウで設定する方法をご紹介しましたが、
設定を開かずに、結果を見ただけで「おや?ちょっとおかしいな?」と
気づく方法を2つほどご紹介します。

 その方法がこの2つです。

Set Measurementsのウインドウ以外で気づく方法
  • 結果の面積値が画像全体もしくはROI範囲と一致しているか?
  • Max値が閾値と一致しているか?

 この2つです。それぞれについて少し解説してみましょう。

結果の面積値が画像全体もしくはROI範囲と一致しているか?

 まずは、結果の面積値を確認する方法です。
先ほどの面積値の結果を覚えていますか?273280ですね。

 この273280という数字は、
読み込んだ画像のサイズと一致します。
例えば、先ほど読み込んだねじの画像サイズは、640x427pixでした。
つまり、640×427=273,280ということで、一致しています。

 この例は、画像全体で面積値を取得しているためこうなっていますが、
ROIを切っている場合は、ROIの面積値と一致します。

 ですから、まずは結果を確認したときに、
閾値設定しているはずなのに面積に差がないな…
そのうえ、この面積の値よく見たら画像サイズと一緒じゃない??
みたいになったらほぼ確実に先ほど紹介したSet Measurementsを確認したほうが良いです。

Max値が閾値と一致しているか?

 次に気づきやすいポイントとしては、
結果のMax値を確認する方法です。

 先ほどの結果をMax値も含めて再掲します。

 すると、Max値が、閾値設定が正しく行えている場合と、
閾値設定が正しく行えていない場合で差があるのがわかると思います。

 1、2番は閾値を0~50と0~30で設定していたため、
当然Max値もそれぞれ50と30になっています。

 それに対して、正しく閾値設定が行えていない3,4に関しては、
Max値が254。つまり8bit画像のほぼ上限の値がMaxになっています。

 閾値を輝度0~50と設定しているのに、
254なんて輝度のピクセルがあるのはおかしいですよね?

 ですから、このMaxの値に関しても確認しておくとSet Measurementsの
Limit to Thresholdを変更しなければいけないかどうか判断がつきますね。

今回のまとめ:気づいてしまえば簡単だが、気づかないと悲惨…

 今回は、気づいてしまえばなんてことはない
閾値設定についての話でした。

 あまりSet Measurementsをいじる機会ってないようにおもいますが、
ちょっとした拍子に変更することってありますよね。

 例えば、ちょっと結果出力しようと思っても、
出力結果が左から右へずらっと並んでいて、
少し出力データ減らせば?と心の声が聞こえる場合がありますよね。

 そんな時にとりあえず片っ端から
何も考えずにチェックを外していくと、
このLimit to Thresholdのチェックまで間違って消してしまう…という流れですね。

 でこれ気づかないと、マクロを組んだ時に悲惨なんですよね…
よーし閾値設定してこれでいけるな~なんて思って
マクロをおりゃーと回すわけですが、
面積が「あれ、全部同じ結果????」

 1回マクロを回して結果を見ておかしいと気づければまだいいですが、
何回も間違った設定でマクロを回すと、設定を正しくした状態で
また同じマクロを回さないといけません。つまり無駄作業…

 単純作業を効率化しようとしてマクロを使っているのに、
無駄な作業が増えてしまうという悲しい状態になります。
そんなことにならないためにも、設定が正しいか日々確認しましょうね。

コメント

タイトルとURLをコピーしました