准确显示数据中的像素图像

准确显示数据中的像素图像

我正在进行图像去噪工作,因此希望尽可能准确地显示图像(例如去噪之前和之后)。

我的灰度图像在一个文件中表示,该文件有 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 厘米):

在此处输入图片描述

相关内容