如何从一张256位单色图片中获得这个结果?

3
我刚在我正在学习的《计算机视觉(数字图像处理)》一书中发现了这张图片。

image showing picture transformed in different ways

这本书没有解释如何达到这个结果,我想知道如何在其他图像上达到相同的结果。
我在书中找到这张图片的背景是“使用DFT、WHT和DCT进行块变换编码”。 图片附近的文字说:
(a)一张256位单色图像。 (b)-(h)图像(a)中四个最重要的二进制和格雷编码位平面。
你知道有什么可能的方法可以达到这个奇怪的结果吗?

1
猜测的话,“256位”部分可能是个错误,实际上应该指的是256个灰度级别(8位)。至少按照我的理解,随后的图像是最高有效位、次高有效位,以此类推。 - Jerry Coffin
1
猜测的话,“256位”部分可能是个错误,实际上应该指的是256级灰度(8位)。至少按我的理解,随后的图像是最高有效位、次高有效位,以此类推。 - Jerry Coffin
1
猜测的话,“256位”部分可能是个错误,实际上应该是指256个灰度级别(8位)。至少在我的理解中,随后的图像是最高有效位、次高有效位,以此类推。 - undefined
@JerryCoffin,实际上这与我从文本中得到的是一样的,但我觉得它看起来不像通常的位平面“效果”。它看起来像对那些“提取的位”进行了一些额外的转换。 - nic
可能是,但如果没有更多的信息,甚至猜测都几乎不可能。 - Jerry Coffin
显示剩余6条评论
1个回答

2
这里是二进制的“位平面”。
如果你对格雷码有疑问,请先了解一下。然后我们可以讨论一下。这些想法与二进制代码并没有太大的区别。
你那里的书页照片显示了一些源图像的平面。源图像中的噪点在较低的平面中逐渐变得更加明显。
通过各种复制和打印步骤,噪声会变成灰度。这就是为什么只有最高的平面显示出相当清晰的边缘和纯黑/白色的原因。
请注意,每个平面都被拉伸为完全的黑色或白色。如果我不这样做,你只会得到越来越暗的图片,随着位数的增加。
im = cv.imread(cv.samples.findFile("lena.jpg"), cv.IMREAD_GRAYSCALE)

for k in range(8):
    title = f"bit position {k}, value {2**k}"
    plane = ((im >> k) & 1)
    cv.imshow(title, plane * 255)
    cv.waitKey()
    cv.destroyWindow(title)

bit 7 bit 6

bit 5 bit 4

bit 3 bit 2

bit 1 bit 0


plane = (im & (1 << k)) # and no scaling by 255

bit 7 bit 6

bit 5 bit 4


谢谢!你有没有关于格雷码等方面的更多阅读建议? - nic
谢谢!你有没有任何建议可以告诉我在哪里可以阅读更多关于格雷码等方面的资料? - nic
维基百科是一个可以接受的起点。这是一个谦逊的概念,没有太多内容。 - Christoph Rackwitz
维基百科是一个可以接受的起点。它是一个谦逊的概念,没有太多复杂性。 - Christoph Rackwitz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接