我正在使用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
那么我做错了什么?
答案 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