首页 > 解决方案 > 如何使用 gnuplot 将图像数据读取为 2D 网格

问题描述

Gnuplot 是一个非常强大的库,支持绘制具有大量科学操作的函数。我的情况是,我想读取单通道灰度图像,就像我们在 matlab 或 python 中imread使用 gnuPlot 将其存储到 2D 数据网格中一样。

基本上我想制作图像灰度强度的轮廓。为此,我.dat使用matlab将图像的单通道亮度数据导出为文件,一旦导出,我使用以下方法对其进行分割:

set contour base 
splot 'greyScaleImagePixelByPixelData.dat' matrix

这很好用,但如果我不想使用 Matlab 逐像素导出数据以绘制图像,该怎么办?

标签: matlabgnuplotgrayscale

解决方案


下面的示例已使用 8 位和 16 位灰度 png 图像(无 alpha 通道)进行了测试。如果您的特定图像与此不匹配,请提供更完整的编码方式说明。

在读入像素数据后,您还没有确切地说出您想对它做什么,所以我展示了一个将其显示为图像的明显示例(例如,一个规则的像素数组)。如果您想在绘图之前对值进行进一步操作,请扩展问题以提供更多详细信息。

[~/temp] file galaxy-16bitgrayscale.png
galaxy-16bitgrayscale.png: PNG image data, 580 x 363, 16-bit grayscale, non-interlaced
[~/temp] gnuplot
set autoscale noextend
plot 'galaxy-16bitgrayscale.png' binary filetype=png with rgbimage

请注意,gnuplot 没有针对灰度和 RGB 图像数据的任何单独存储模式。在这种情况下,它将每个 16 位灰度值的 3 个副本加载到并行存储中,就好像它是单独的 R/G/B 像素数据一样。

在此处输入图像描述

[第二次编辑:显示灰度图像和轮廓级别]

set autoscale noextend
set view map
set contour surface
set cntrparam levels discrete 100, 200
set cntrparam firstlinetype 1
set key outside title "Contour levels"
splot 'galaxy16bit.png' binary filetype=png with rgbimage notitle, \
      '' binary filetype=png with lines nosurface title ""

在此处输入图像描述


推荐阅读