是否有一些程序可以在 Linux 上分析文件,尤其是图像文件,其功能类似于十六进制编辑器,它将显示在我绘制图像的某些区域等后字节发生了变化。
答案1
如果您只是寻找一种方法来比较处理后的图像,以便您可以看到哪些像素(以及在哪些通道中)发生了变化,您可以使用 ImageMagick 的compare
工具。 ImageMagick 网站对此进行了广泛的介绍:http://www.imagemagick.org/script/compare.php。
这是该页面的一个示例,但我使用的是玫瑰图片来自此网站。假设您有一张图像rose.jpg
,并对它运行锐化函数,并将结果保存到reconstruct.jpg
.
$ convert rose.jpg -sharpen 0x1 reconstruct.jpg
然后我们可以使用该工具从上面的 2 个图像compare
构建图像,如下所示:difference1.png
$ compare rose.jpg reconstruct.jpg difference1.png
如果我们想从原始图像中删除任何提示,difference1.png
我们可以使用该-compose src
选项进一步从差异图像中删除原始图像。结果可以在 中看到difference2.png
。
$ compare -compose src rose.jpg reconstruct.jpg difference2.png
compare
这只是我们能做的事情的表面。它还可以向您显示每个颜色通道的差异等。
这是在-compose src
做什么?
如果您有兴趣,这里将详细讨论此操作。
摘录-http://www.imagemagick.org/script/command-line-options.php#compose- 撰写运算符
设置图像合成的类型。看阿尔法合成有关 alpha 合成的详细讨论。
此设置会影响以某种方式将两个(或更多)图像合并在一起的图像处理运算符。这包括运营商、 -比较,-合成的,-层数合成的,-展平,-马赛克,-层数合并,-边界,-框架, 和-程度。
它也是“composite”命令的主要选项之一。
答案2
命令行方式
有各种命令行程序,例如xxd
或hexdump
,它将文件的十六进制内容输出到终端。您可以用来vim
编辑十六进制文件。看这个答案。
这真的是你想做的吗?您说您特别想分析图像文件。为此,最好使用编程语言。
使用编程语言
图像只是一个数字矩阵。例如,RGB 图像可能表示为包含 0 到 255 值的 3 个矩阵。5x5 像素的纯红色图像如下所示:
矩阵1(红色平面):
255 255 255 255 255
255 255 255 255 255
255 255 255 255 255
255 255 255 255 255
255 255 255 255 255
矩阵2(绿色平面):
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
矩阵3(蓝色平面):
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
为了以这种方式分析图像,已经创建了各种工具。这些工具在图像处理领域是相当标准的:
- MATLAB(矩阵实验室)最初就是为此目的而创建的。 GNU Octave 与 MATLAB 基本兼容,可以用来代替它。
- Python 是一个很好的开源替代方案,可以使用它的功能来操作图像scikit 图像包裹。
它们都是交互式的并且非常易于使用。>>
例如,MATLAB 会在您键入命令时给出提示。无需编译。
MATLAB/Octave 示例
要读取图像:
>> im = imread('Penguins.jpg');
要从图像中提取红色平面:
>> red = im(:,:,1);
这使用:
运算符从图像的第一个 z 平面(红色平面)提取所有 x 坐标和所有 y 坐标。
查看红色平面的前 5x5 像素:
>> red(1:5, 1:5)
ans =
116 118 118 120 118
116 116 117 118 116
118 117 117 118 118
117 117 118 118 118
119 118 117 118 118
我不会发布 Python 示例,但它同样很容易做到。
答案3
如果文件不是某种压缩或其他编码格式,并且更改有限,您可以使用cmp -l
.
当我们获得第一块可以向单镜头磁带盒提供图像的 TargaVista 图形板时,它附带了一个简单的命令行 (DOS) 上传实用程序和绘图包,但没有任何文档。
很容易计算出,未压缩的图像确实有 18 * 3 *(宽 * 高)像素的大小。然后,我创建了一个完整的黑色图像,并导出了几个文件,其中每个文件的一个角上只有一个原色像素。通过比较这些文件(传输到 SunOS 后),cmp -
可以轻松分析行和列的字节顺序以及颜色顺序,并编写一个程序将渲染.gif
图像解压到.tga
.²
1那是在 1990 年,当时还没有支持/ 的开源库.tga
.vst
。 2卖给我们卡的经销商花了几周的时间才给我们提供了一份几乎难以阅读的第 n 份传真,其中包含来自美国的文件格式信息。基于此,我可以实现文件的 RunLengthEncoded 版本,并为每帧节省几秒钟的上传时间。