我正在研究一个想法,我必须在JPG或PNG文件中识别行.PNG文件包含一个单值图表 - 一个x,y组合.例如,图形看起来像Y = mx + c.我想识别图中的线 - 如果我可以识别帧中像素的位置,我相信我可以找回用于绘制图形的值(x,y).这里的假设是 - 我知道比例即1像素= Y的单位?有人可以帮我编写一个代码,用于识别一个PNG文件中特定颜色的像素吗?
编辑
让我们举个例子来说清楚.假设我有一组数据值X和Y像这样 -
X = 1, Y = 10 X = 2, Y = 20 X = 3, Y = 30 X = 4, Y = 40 X = 5, Y = 50 X = 6, Y = 60
在这种情况下,如果我使用jfreechart类型的图表工具并制作图表,它就像一条直线工具.
因此输入是数据集,输出是.PNG文件(使用jchart或jfreechart),其中包含Y值的这个折线图.
问题是 - 如果我们逆转流程,我们是否可以开发一个程序来获取PNG文件(包含图形)并返回数据集.
问题的上下文是 - 我想将PNG文件存储在我的应用程序中而不是原始数据集中.但鉴于PNG文件,我应该能够取回我的数据集.
关于你的问题是简单地确定图像中像素的颜色,还是问题是你想要做的事情的数学,我有点困惑.
对于前者,请执行以下操作:
BufferedImage bimg = ImageIO.read(new File("whatever.png")); // get the colour of the pixel at position (x, y) int col = bimg.getRGB(x, y); // decode red, green and blue components of colour if necessary int r = (col >> 16) & 0xff; int g = (col >> 8) & 0xff; int b = col & 0xff;
如果从图表中您只想获取数据集(即不从该数据导出方程式),那么您基本上遍历每个X位置并找到Y位置,其中有一个图形绘制程序使用的颜色像素.如果图形具有轴,抗锯齿等,那么任务将更加复杂.
从数据中导出方程式的任务可能要复杂得多,但您可以从检查某些可疑公式开始,例如y = mx + c.例如,您可以循环检查最后一个Y位置之间的差异; 如果这个差异总是相同的,那么你就得到了一个直线图(在这一点上,推导公式应该是微不足道的).
为了测试其他方程,有助于了解一些微积分.然后,一个起点是看差异的差异是否与所讨论的等式的导数相匹配.(举个例子,如果方程是y = ax ^ 2 + c,那么对于X的每次增加,Y的增加本身就会增加2a.)