1

こんにちは私はたくさんの画像を持っています。それらすべてが同じサイズであると仮定しましょう。画像の背景は黒で、蛍光を表す準円形の緑色のスポットがいくつかあります。各画像の蛍光量(パーセンテージ)を計算する必要があります。つまり、緑のスポットの領域です。

たとえばJavaでこれを行う方法はありますか?

4

4 に答える 4

5

これは画像処理の標準的な問題であり、画像セグメンテーションと呼ばれます。あなたはそれについての膨大な量の情報を見つけることができるでしょう。

特に、これはあなたがしている顕微鏡画像処理でよくある問題です。ImageJでそれを行うための定型操作があるかもしれないと思います; そうでない場合は、ImageJではかなり単純なマクロになります。ImageJはJavaであるため、必要に応じてImageJのライブラリを使用してJavaコードを記述できます。

私はあなたがするアプローチを提案します:

  1. 画像を前処理してクリーンアップします-中央値フィルターまたはセルよりも大きい近傍を持つガウス畳み込みを減算することによるバックグラウンド減算、またはローリングボールアルゴリズム(ImageJソースでそれを探します)、または同様のもの、おそらくその後にスペックルを除去するための少量のぼかし(たとえば、3x3の近傍を持つメジアンフィルター)。
  2. 画像のヒストグラムを計算する
  3. ヒストグラムで2つのピークを検索します。1つは黒のピクセルに対応し、もう1つは緑に対応します。
  4. 2つのピークの値を使用して、2クラスターのK-means(2-means、おそらく!)セグメンテーションをシードします。

K-meansステップを実行する代わりに、ヒストグラムからしきい値を選択し(たとえば、2つのピーク間の谷を探します)、その上でセグメント化することができます。または、ある種の適応セグメンテーションを使用します(たとえば、ピクセルを近隣の中央値と比較します)が、それにはある程度の調整が必要になります。

于 2010-12-01T12:56:47.030 に答える
0

今は詳しく説明する時間がありませんが、プロセスの概要を説明できます。

画像をループする

  1. 各画像をBufferedImageにロードします(http://download.oracle.com/javase/6/docs/api/java/awt/image/BufferedImage.html)
  2. 各ピクセル(x、y)をループして、そのピクセルの色を取得します(int getRGB(int x、int y))
  3. この色を参照色(たとえば、緑の場合は0x7FFF00)と比較するか、受け入れられる色の範囲を定義します。
  4. 一致する場合は、カウンターをインクリメントします
  5. ループが実行された後、カウンターをピクセルの総数などと比較すると、パーセンテージが得られます

(注:これはおそらくそれを行うための非常に素朴な方法であり、可能な最適化の負荷がありますが、それは開始する必要があります)

于 2010-11-17T12:27:29.753 に答える
0

たとえば、imagemagikを使用できます。http://www.imagemagick.org/discourse-server/viewtopic.php? f = 1&t=16177を参照してください。

于 2010-11-17T12:32:21.493 に答える
0

いくつかの考え:

  • エッジ検出を実行してから、ハフサークル変換を実行できます。円の半径がすでにわかっている場合は、これでうまくいくはずです。
  • 色を比較するときは、ファジー比較に適した色空間を使用できます。たとえば、HSV色空間
  • 背景が黒なので、輝度を計算してしきい値を適用するのがおそらく最も簡単です。次に、しきい値を超えるピクセルをカウントします。
  • コンピュータビジョンの問題を投稿するときは、入力資料を確認すると常に役立ちます。
于 2010-12-01T12:07:07.343 に答える