我是这个地区的新手;如果我没有很好地描述这个问题,请原谅。
我有一个六角形文件,其中应包含三个图像(宽度:640,高度:333)。 hex文件是1.2 MB。因此,如果我们进行一些计算,我们会得到每个像素应该有16位数据。
该文件的一些十六进制代码如下:
90 eb 6f 14 02 02 fd fd 4e 01 80 02 00 00 00 00
90 eb 6f 14 82 82 7d 7d 4e 01 80 02 03 00 00 00
90 eb 6f 14 c2 c2 3d 3d 4e 01 80 02 00 00 8e 08
a7 33 0f d4 00 01 00 01 00 01 43 01 f8 03 0e 17
00 01 00 00 00 00 02 00 00 00 00 00 00 00 01 00
00 04 00 00 01 01 00 00 00 00 00 00 00 00 00 00
00 00 01 01 00 00 00 00 00 01 00 00 00 00 00 00
00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
00 00 00 00 00 00 00 01 00 00 00 00 00 00 01 01
00 00 00 00 01 00 00 00 00 00 00 00 00 00 01 01
00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00
00 01 00 00 08 01 00 00 00 00 00 00 00 00 00 00
00 01 00 00 00 00 00 01 00 00 00 00 00 0a 01 00
00 00 01 00 01 00 00 00 01 00 00 00 00 00 00 00
02 00 00 01 00 00 00 01 00 00 00 00 00 00 00 01
正如您所看到的,有一个包含4行内容的标题,其中3个是相似的。位图数据开始。重复行在文件中再重复两次。所以我假设重复结构位于3个图像的每个图像的开头。但这些标头之间的数据是210 KB,这意味着每像素8位。所以我将每个8位读取为一个小整数,并将其设置为图像的相应像素的rgb。所以我获得了3张灰色图像。此外,文件中还有630 KB的数据未读。
以下是magnified version of the original image as gray(图片的原始版本已着色)和obtained image。如您所见,有些像素(每隔一个像素)与原始像素完全不同,但整个图像几乎是正确的。
所以,我的问题如下: hex文件的真正结构是什么?我该如何阅读hex文件? 我怎样才能获得原始彩色文件? 什么是额外的630 KB数据!?什么是错误的像素?!
这里也是原始图像(i.stack.imgur.com/NdBOa.png),原始图像为灰色(i.stack.imgur.com/wDUPB.png)并获得图像(i.stack.imgur.com /lY3ib.png)。
答案 0 :(得分:1)
没有结论,但这是我发现的......
如果您将十六进制转储文件并查看开头,则会找到90eb
,如果您在整个文件中查找该文件,则会得到以下结果:
xxd a.raw | egrep "90eb"
0000000: 90eb 6f14 0202 fdfd 4e01 8002 0000 0000 ..o.....N.......
0000010: 90eb 6f14 8282 7d7d 4e01 8002 0300 0000 ..o...}}N.......
0000020: 90eb 6f14 c2c2 3d3d 4e01 8002 0000 8e08 ..o...==N.......
0034340: e773 2bf4 90eb 6f14 c2c2 3d3d 4e01 8002 .s+...o...==N...
0068660: 0301 0100 ca03 0104 90eb 6f14 c2c2 3d3d ..........o...==
数据看起来在每90eb
之后开始32个字节。如果图像是640x333,则每个图像将有213,120个字节。因此,我们可以使用ImageMagick提取图像的基本平面/通道:
dd if=a.raw bs=1 skip=64 count=213120 | convert -depth 8 -size 640x333 gray:- a.png
dd if=a.raw bs=1 skip=213860 count=213120 | convert -depth 8 -size 640x333 gray:- b.png
dd if=a.raw bs=1 skip=427656 count=213120 | convert -depth 8 -size 640x333 gray:- c.png
现在我们遇到了一个问题 - 各个图像在所有三个图像中的位置不同 - 你可以看到,如果我像这样一起动画3个帧:
convert -delay 80 a.png b.png c.png -normalize anim.gif
所以现在我有点迷失 - 因为视点似乎移动了,有多个摄像头吗?
我不知道 - 也许我的发现会激励别人!我们来看看。
另一种方法可能是比较统计数据 - 如果你看一下"原始" 图像的统计数据,你会得到这个:
identify -verbose original.png | egrep "Red:|Green:|Blue:|mean:|deviation"
Red:
mean: 5.77718 (0.0226556)
standard deviation: 17.0501 (0.066863)
Green:
mean: 13.7015 (0.0537312)
standard deviation: 38.4053 (0.150609)
Blue:
mean: 10.2863 (0.0403386)
standard deviation: 30.1792 (0.11835)
如果你现在查看上面提到的a.png
,b.png
和c.png
的统计信息,你会得到:
identify -verbose a.png | egrep "Red:|Green:|Blue:|Gray:|mean:|deviation"
Gray:
mean: 2.48532 (0.00974635)
standard deviation: 9.00678 (0.0353207)
identify -verbose b.png | egrep "Red:|Green:|Blue:|Gray:|mean:|deviation"
Gray:
mean: 10.1611 (0.0398473)
standard deviation: 30.2288 (0.118544)
identify -verbose c.png | egrep "Red:|Green:|Blue:|Gray:|mean:|deviation"
Gray:
mean: 2.26135 (0.00886804)
standard deviation: 7.43093 (0.0291409)
并且"原始"的统计数据之间似乎没有相关性。图像和推定的"频道"提取的图像...我认为这里发生的事情比我猜的要多。