Octave imwrite失去了灰度

时间:2014-05-01 14:39:20

标签: image image-processing octave grayscale

我正在使用Octave 3.6.4来处理图像并在之后存储它。我读取的图像是灰度图像,计算后矩阵应该是相同的类型。但是,如果我打开存储的图像,则没有灰色像素。只有黑色和白色,灰色的丢失了。它们基本上都是白色的。

以下是处理代码:

function aufgabe13()
    [img, map, alpha] = imread("Buche.png");
    [imax, jmax] = size(img);
    a = 0.7;
    M = 255 * ones(imax,jmax + round(imax * a));
    for i = 1:imax
        begin = round((imax-i)*a);
        M(i,begin +1 : begin + jmax) = img(i,:);
    end
    imwrite(M, 'BucheScherung.png', 'png');
end

那么我做错了什么?

1 个答案:

答案 0 :(得分:3)

之所以如此,是因为M是一个double矩阵,因此在表示图像时,这些值应该在[0,1]之间。由于您的图片中的值在读入时会显示[0,255](类型uint8),因此很多值都是白色的,因为它们超出了值1.您应该做的是转换图像这样它是双精度并在[0,1]之间标准化,然后正常进行。这可以使用im2double函数完成。

换句话说,这样做:

function aufgabe13()
    [img, map, alpha] = imread("Buche.png");
    img = im2double(img); % Edit
    [imax, jmax] = size(img);
    a = 0.7;
    M = ones(imax,jmax + round(imax * a)); % Edit
    for i = 1:imax
        begin = round((imax-i)*a);
        M(i,begin +1 : begin + jmax) = img(i,:);
    end
    imwrite(M, 'BucheScherung.png', 'png');
end