编辑:我发现另一个问题实际上解决了我遇到的一个单独但可能相关的问题。但是,在以下情况下,图像在uint8读取到 Octave 和 MATLAB 时都在其中,因此它实际上并没有解决这个特定问题。
我正在阅读Scientist and Engineer's Guide to Digital Signal Processing并尝试本章后面给出的图像处理示例。但是我遇到了一个奇怪的问题,它使我的进度停滞不前,因为它使我无法预测会发生什么。
我从一开始就使用 Octave,但今天下载了 MATLAB 的试用版,它的功能完全相同。
这是一个例子。我创建了一个测试图像来试验灰度变换。这是原始的PNG:
在 Octave 中,我运行以下代码:
>> dots3 = imread('dots_3gray.png');
>> imshow(dots3);
我得到了这个结果:
正如您所看到的,这些值都发生了变化——Octave(以及 MATLAB)显示的图像已经降低了所有值,因此白色现在是深灰色,灰色现在是黑色。(忽略大小差异,第二个是截屏)两者都是100x100像素的灰度图。Octave 读取的矩阵中的最小值为 0,最大值为 158。
有趣的是,使用 Paint.NET 中的吸管工具,我检查了原始 PNG 中的值范围,最小值(在灰点的中心)为 96,最大值(在白色字段中)为 255——a 159 的差异,这与 Octave 读取的点 3 中报告的数字 [0, 158] 范围内的步数完全一致。因此,这里似乎正在发生某种转变。
我可以通过将像素值移动 97(255 和 158 之间的差异)来使图像以正确的颜色显示:
>> imshow(dots3 + 97)
知道为什么会发生这种行为吗?这让我很难对算法进行试验,因为我不知道更改是由代码还是由 Octave / MATLAB 自己造成的。
平台是 Windows 10。谢谢。

