1

私のソフトウェアは、スペクトル バンドを判断し、バンドの位置を指定して、バンドのピーク ポイントと幅を見つける必要があります。

ここに画像の説明を入力

画像の射影を取り、各ピークの幅を見つけることを学びました。


しかし、射影を見つけるためのより良い方法が必要です。

私が使用した方法では、幅 1600 ピクセルの画像 (たとえば 1600X40) を長さ 1600 のシーケンスに縮小します。理想的には、同じ画像を使用して画像を 10000 の長さのシーケンスに縮小したいと考えています。

1600 ポイントでは解像度が低すぎるため、より長いシーケンスが必要です。1点でも測定値に大きな差(バンドが18~19で判定された場合は4%の差)が生じます。

同じ画像からより長い投影を取得するにはどうすればよいですか?

使用したコード: https://stackoverflow.com/a/9771560/604511

import Image
from scipy import *
from scipy.optimize import leastsq

# Load the picture with PIL, process if needed
pic         = asarray(Image.open("band2.png"))

# Average the pixel values along vertical axis
pic_avg     = pic.mean(axis=2)
projection  = pic_avg.sum(axis=0)

# Set the min value to zero for a nice fit
projection /= projection.mean()
projection -= projection.min()
4

2 に答える 2

7

あなたがしたいことは、補間と呼ばれます。Scipy には補間モジュールがあり、さまざまな状況に対応するさまざまな機能が多数あります。こちらをご覧ください、または特に画像についてはこちらをご覧ください。

これは、いくつかのサンプル コードと、何が起こるかを示すグラフを含む、最近寄せられた質問です。

ただし、補間によってデータがより正確になるわけではないことを認識することが非常に重要であるため、この状況では役に立ちません。

より正確な結果が必要な場合は、より正確なデータが必要です。他に方法はありません。高解像度の画像から始める必要があります。(リサンプリングまたは補間すると、実際には結果の精度が低下します!)

更新 - 質問が変更されたため

@Hooked は良い点を指摘しました。それについて考える別の方法は、すぐに平均化する(データの分散を捨てる)代わりに、スペクトル画像の各水平行から40個のグラフ(投稿された画像の下のもののような)を作成できることです。グラフはかなり似ていますが、ピークの位置、高さ、幅に多少の違いがあります。これらの 40 枚の画像のそれぞれで、これらの各ピークの位置、高さ、および幅を計算し、このデータを組み合わせ (40 のグラフ全体でピークを一致させる)、適切な分散をエラー推定値として使用する必要があります (ピーク位置、高さ、および幅)、中心極限定理を使用して。そうすれば、データを最大限に活用できます。ただし、これはスペクトログラムの各行の間にある程度の独立性があると仮定していると思いますが、そうでない場合もありますか?

于 2012-06-13T07:07:59.190 に答える
2

@fraxelの回答にさらに詳細を提供したいと思います(コメントを待ちます)。入力した情報以上の情報を取得できないという彼の意見は正しいですが、もう少し詳しく説明する必要があると思います...

  1. いくつかのデータを捨てているよう1600x40 -> 1600見えるデータを投影しています。技術的には正しいですが、射影の要点は、高次元のデータを低次元に持ってくることです。これは、次の場合にのみ意味があります...
  2. データは、より低い次元で適切に表現できます。間違っている場合は訂正してください。ただし、データは実際には 1 次元のように見えます。縦軸は、x 軸 (波長?) 上の特定の点の変動性の尺度です。
  3. 射影が理にかなっているとすると、特定の波長ポイントごとにデータをどのように要約すればよいでしょうか? 私の以前の回答では、各ポイントの平均をとったことがわかります。システムの特定のプロパティに関する他の情報がない場合、これは妥当な一次近似です。
  4. 必要に応じて、より多くの情報を保持できます。以下に、y 軸に沿って分散をプロットしました。これは、信号が高い場合は測定値の変動性が高く、信号が低い場合は変動性が低いことを示しています (これは便利なようです!)。 ここに画像の説明を入力
  5. 次に行う必要があるのは、投影前に余分な 40 ピクセルのデータをどうするかを決定することです。それらは物理的に何かを意味し、研究者としてのあなたの仕事は、そのデータを意味のある方法で解釈して投影することです!

画像を生成するコードは以下の仕様です。データは、元の投稿のスクリーン キャプチャから取得されました。

import Image
from scipy import *
from scipy.optimize import leastsq

# Load the picture with PIL, process if needed
pic         = asarray(Image.open("spec2.png"))

# Average the pixel values along vertical axis
pic_avg     = pic.mean(axis=2)
projection  = pic_avg.sum(axis=0)

# Compute the variance
variance = pic_avg.var(axis=0)

from pylab import *

scale = 1/40.

X_val = range(projection.shape[0])
errorbar(X_val,projection*scale,yerr=variance*scale)
imshow(pic,origin='lower',alpha=.8)
axis('tight')
show()
于 2012-06-13T14:14:49.333 に答える