如果我们只有图像,如何发现区域图表数据?

时间:2010-09-16 13:12:03

标签: image-processing screen-scraping image-recognition

区域图(图像)有一些数据系列,用不同的颜色绘制。我们知道x-Axis上每个标签的图像大小和坐标,是否可以通过图像识别来发现y轴系列?任何人都可以解释一下吗?

1 个答案:

答案 0 :(得分:1)

如果您知道y轴刻度,则应该可以。

要进行屏幕抓取,您可以先使用每个系列的滤镜过滤图像。 第二步是收集临时图像中所有剩余像素的坐标,并将它们转换为所需的比例。

给出

  • 坐标x,y
  • 处的像素
  • 图表偏移量图像像素xoffset,yoffset
  • 图表轴xscale,yscale
  • 的比例

你可以计算这个像素的数据(伪代码)

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

然后,如果您的系列行超过一个像素宽,则进行一些插值(例如,获取单列中所有像素的平均数据)。

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;