1

面グラフ(画像)には、さまざまな色でグラフ化されたいくつかのデータ系列があります。x軸上の各ラベルの画像サイズと座標がわかっていますが、画像の認識によって一連のy軸を見つけることは可能ですか?誰かが光を当てることができますか?

4

1 に答える 1

1

y軸の目盛りがわかればできるはずです。

スクリーンスクレイピングを行うには、まず各シリーズのカラー フィルターを使用して画像をフィルター処理します。2 番目のステップは、一時画像内の残りのすべてのピクセルの座標を収集し、それらを必要なスケールに変換することです。

与えられた

  • 座標 x,y のピクセル
  • チャートのオフセット 画像ピクセルの原点 xoffset, yoffset
  • チャート軸のスケール xscale、yscale

このピクセルのデータを計算できます(疑似コード)

pixelData.x := (x - xoffset) * xscale
pixeldata.y := (y - yoffset) * yscale

その後、系列線の幅が 1 ピクセルを超える場合は補間を行います (たとえば、1 つの列のすべてのピクセルの平均データを取得するなど)。

Update1: 赤チャートを除外する単純なカラー フィルターの疑似コード

//set up desired color levels to filter out
redmin := 240;
redmax := 255
bluemin := 0;
bluemax := 0;
greenmin := 0
greenmax := 0;

//load source bitmap
myBitmap := LoadBitmap("Chartfile.bmp");

//loop over bitmap pixels
for iX := 0 to myBitmap.width-1 do
  for iY := 0 myBitmap.height-1 do
    begin  
      myColorVal := myBitmap.GetPixels(iX, iY);
      //if the pixel color is inside your target color range, store it
      if ((mycolorVal.r >=redmin) and (myColorVal.r <= redmax)) and
         ((mycolorVal.g >=greenmin) and (myColorVal.g <= greenmax)) and
         ((mycolorVal.b >=bluemin) and (myColorVal.b <= bluemax)) then 
         storeDataValue(iX, iY); //performs the value scaling operation mentioned above
    end;
于 2010-09-16T13:32:07.097 に答える