我有一个 pgm 图像,它有 1251 个不同的像素值,范围从 0 到 1250。我知道这一点,因为我可以用 kate 打开这个图像文件并查看这些值。
但是当我使用 Matlab 的 imread 打开同一个文件时,它也会返回 1251 个不同的像素值,但这些值不是连续的。最小值为 0,最大值为 65483。
我想在 for 循环中遍历这些值,因此我需要读取文件中存在的原始值和连续值。在 Matlab 中如何做到这一点?
编辑:如果有人想尝试,这就是图像。
这些值是按比例缩放的,因此当您查看图像时,它不会大部分是黑色的。
我通过检查以下内容测试了缩放是否适用于直接整数截断:
[A] = imread( 'myfile.pgm', 'pgm' );
p = sort(unique(A(:));
q = uint16((0:1250) * 65535 / 1251)';
all(p == q) % returns 1
因此,您可以像这样恢复图像:
map = arrayfun( @(x) uint16(x * 1251 / 65536), 0:65535 );
B = arrayfun( @(x) map(x+1), A );