【问题标题】:Matlab For Loop ImageMatlab For 循环图像
【发布时间】:2016-08-25 02:07:19
【问题描述】:

我正在尝试在 MATLAB 中打开一个 .pgm 图像文件,使用 for 循环运行操作,然后另存为另一个 .pgm 文件。在进行操作之前,我正在测试是否可以重新创建图像:

clear

picture = imread('Picture.pgm');

sizePic = size(picture);

sizeX = sizePic(1);
sizeY = sizePic(2);

newPicture = zeros(sizeX,sizeY);


for i = 1:sizeX
    for j = 1:sizeY
        newPicture(i,j) = picture(i,j);
    end
end

imwrite(newPicture, 'NewPicture.pgm');

但是,新图像几乎全是白色,带有一些黑色斑点(不是原始图像)。这不应该把原图还给我吗?

【问题讨论】:

  • 很可能与imreadimwrite 中的默认编码选项有关。我建议检查函数的文档,然后检查图像文件中的编码。

标签: image matlab for-loop image-processing


【解决方案1】:

默认情况下,从 imread(XXX.pgm) 创建的 pictureuint8uint16 数组,这意味着像素值在 [0 255] 或 [0 65535] 范围内。另一方面,从zeros 创建的newPicture 是一个double 数组,其预期像素值仅为[0 1]。在保存的图像中,任何大于 1 的值都将被解释为 1(白色)。当你为这样的double 数组分配一个[0 255] 值时,由于picture 中的大多数像素值都是1 及以上,当然你会得到大部分是白色像素

使用图像时,请始终检查图像数组的类型。例如,通过显式转换 imread 返回的图像,始终使用 double 类型可能是个好主意: pictures=im2double(imread(xxx))

【讨论】:

    猜你喜欢
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    相关资源
    最近更新 更多