由于没有人似乎提供了一种Matlab方法,我提供了一种基于ImageMagick的方法,可能适用于您。它安装在大多数Linux发行版上,可免费用于macOS和Windows。
在终端(Windows上的命令提示符)中的以下命令将拍摄您的图像,关闭透明度并填充不在red
的10%范围内的黑色所有像素。
magick plot.png -alpha off -fuzz 10% -fill black +opaque red result.png
如果我们这样做完全一样的事情了,但随后将图像转换为文字是这样的:
magick plot.png -alpha off -fuzz 10% -fill black +opaque red txt:
我们会得到这样的:
# ImageMagick pixel enumeration: 650,455,65535,srgb
0,0: (0,0,0) #000000 black
1,0: (0,0,0) #000000 black
2,0: (0,0,0) #000000 black
3,0: (0,0,0) #000000 black
4,0: (0,0,0) #000000 black
5,0: (0,0,0) #000000 black
6,0: (0,0,0) #000000 black
7,0: (0,0,0) #000000 black
8,0: (0,0,0) #000000 black
...
...
99,138: (65535,0,0) #FF0000 red
100,138: (65535,0,0) #FF0000 red
101,138: (65535,0,0) #FF0000 red
102,138: (65535,0,0) #FF0000 red
103,138: (65535,0,0) #FF0000 red
如果我们再次做同样的事情,但这次解析输出寻找#FF0000
(在Windows上,你会用FINDSTR
,而不是awk
),只是打印第一场到冒号:
magick plot.png -alpha off -fuzz 10% -fill black +opaque red txt: | awk -F: '/#FF0000/{print $1}'
99,138
100,138
101,138
102,138
103,138
434,138
439,138
440,138
...
...
当你正在使用MATLAB,您将需要掏出来ImageMagick的是这样的:
[result,output]=system("magick plot.png -alpha off -fuzz 10% -fill black +opaque red txt: | awk -F: '/#FF0000/{print $1}'");
您可能需要在Windows中插入符号(^
)逃离%
迹象。或者你可以把所有的命令放在一个BATCH文件中,如果你经常这样做,就打电话保存输入。
你会意识到他们会在扫描线才能出来?我指的是图像第一行的所有红色像素,然后是第二行的所有红色像素,等等。 –
@MarkSetchell那么,在MATLAB中按列顺序。摩根船长,看起来像这个图表与'Img(:,:,1)&〜Img(:,:,2)'很合拍。你所有的图表都会变得如此的漂亮整洁吗? – beaker
它在Matlab中可行,但如果这是一次性任务,我建议使用Web应用程序“WebPlotDigitizer”,您可以在其中以高精度手动执行此操作。如果使用Matlab进行制作,相交的红线会让你的生活变得更加复杂。 – brainkz