我正在进行图像去噪工作,因此希望尽可能准确地显示图像(例如去噪之前和之后)。
我的灰度图像在一个文件中表示,该文件有 256^2 = 65536 行,每行都有一个介于 0 和 1 之间的浮点数。
我当然可以使用任何软件从数据中生成图片并以某种格式保存它,但我担心无论是保存它还是将图像放入我的 tex 中总会得出轻微的不准确结论includegraphics
。
因此,我考虑使用 TikZ 实际绘制每个像素。这可能/可取吗?
编辑:该文件如下所示:
7.282250000000000112e-01
7.453062999999999771e-01
6.275306499999999676e-01
5.905055999999999639e-01
5.700786499999999091e-01
.
.
.
前 256 条线组成第一行像素。
答案1
您可以将图像放入文件中\includegraphics
并缩放。不会发生任何数据丢失或插值。
如果你出于某种原因,仍然想使用 Ti 逐像素重新创建图像钾Z,你可以这样做:
\documentclass[border=10Mm]{standalone}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.18}
\begin{filecontents}{image.dat}
7.282250000000000112e-01
7.453062999999999771e-01
6.275306499999999676e-01
5.905055999999999639e-01
5.700786499999999091e-01
0.25
0.75
0.25
0.75
0.25
0.75
0.25
0.75
0.25
0.75
\end{filecontents}
\pgfplotstableread{image.dat}{\pixeldata} % change to the name of the file
\def\pixelwidth{5} % change to width of image in pixels
\begin{document}
\begin{tikzpicture}
\pgfplotstablegetrowsof{\pixeldata}
\pgfmathsetmacro{\datarows}{\pgfplotsretval-1}
\foreach \i in {0,...,\datarows} {
\pgfplotstablegetelem{\i}{[index]0}\of{\pixeldata}
\pgfmathsetmacro{\pixelvalue}{\pgfplotsretval*100}
\fill[black!\pixelvalue] ({mod(\i,\pixelwidth)},{-1*floor(\i/\pixelwidth)}) rectangle +(1,1);
}
\end{tikzpicture}
\end{document}
假设您有一个包含图像像素灰度值的列表,其中 1 表示黑色,0 表示白色,并且您知道图像的宽度(在您的例子中是 256 像素),您可以简单地遍历该列表并绘制一个填充相关灰度值的矩形。当然,您需要告诉 TeX 图像的宽度。您可以\pixelwidth
在上述代码中将宏设置为图像的宽度(以像素为单位)(在您的例子中是 256)。
在上面的代码中,我添加了一些像素来显示一切应该如何工作。 上述代码的输出如下所示(1 像素 = 1 厘米):