matlab - 如何使用 gnuplot 将图像数据读取为 2D 网格
问题描述
Gnuplot 是一个非常强大的库,支持绘制具有大量科学操作的函数。我的情况是,我想读取单通道灰度图像,就像我们在 matlab 或 python 中imread
使用 gnuPlot 将其存储到 2D 数据网格中一样。
基本上我想制作图像灰度强度的轮廓。为此,我.dat
使用matlab将图像的单通道亮度数据导出为文件,一旦导出,我使用以下方法对其进行分割:
set contour base
splot 'greyScaleImagePixelByPixelData.dat' matrix
这很好用,但如果我不想使用 Matlab 逐像素导出数据以绘制图像,该怎么办?
解决方案
下面的示例已使用 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 ""
推荐阅读
- algorithm - 位掩码与布隆过滤器
- android - 如何在 android 9 中使用 UIAUTOMATOR 检查元素
- python - 在 EntityRuler 中将 RegEx 用于短语模式
- python - 将 pandas 数据框中列中的 # 值替换为按行自动递增的值
- excel - Excel VBA:将单行复制到另一个工作表中,而每次复制偏移量减少一个
- vba - 附加页面不断打印为 PDF
- kdb - 在 kdb 中使用 .Qw 的内存统计效率
- javascript - NgRx 状态添加/更新为数组并保持同步
- javascript - 您可以从 Chrome 查找功能中排除隐藏的 DOM 元素吗?
- javascript - 如何将整数更改为 2 个字节