使用 Octave 保存图像但在重新加载时显得模糊
Saving images using Octave but appearing fuzzy upon realoading
我参加了 Coursera 机器学习课程,学习神经网络。我从这个link得到了一些手写数字数据:http://yann.lecun.com/exdb/mnist/
现在我想将这些数据转换成.jpg
格式,我正在使用这段代码。
function nx=conv(x)
nx=zeros(size(x));
for i=1:size(x,1)
c=reshape(x(i,:),20,20);
imwrite(c,'data.jpg','jpg')
nx(i,:)=(imread('data.jpg'))(:)';
delete('data.jpg');
end
end
然后,我运行上面的代码:
nx=conv(x);
x
是手写数字的5000个训练样例。每个训练示例都是一个 20 x 20 像素的数字灰度图像。每个像素由一个浮点数表示,表示该位置的灰度强度。
20 x 20 像素网格 "unrolled" 变成一个 400 维向量。这些训练示例中的每一个都成为我们数据矩阵中的一行 x
。这给了我们一个 5000 x 400 矩阵 x
,其中每一行都是手写数字图像的训练示例。
在我 运行 这段代码之后,我将图像重写到磁盘以检查:
imwrite(nx(1,:),'check.jpg','jpg')
但是,我发现图像很模糊。如何正确转换这些图像?
您正在使用 JPEG 保存图像,这是一种用于保存图像的有损 压缩算法。有损压缩算法保证了高压缩比,但代价是稍微降低图像质量。这可能就是您看到模糊图像的原因,因为它是由压缩伪影造成的。
从表面上看,您想要确切地保存数据应该保存到文件中的内容。因此,请改用 lossless 压缩算法,例如 PNG。因此,将您保存的代码行更改为使用 PNG:
imwrite(c,'data.png','png')
nx(i,:)=(imread('data.png'))(:)';
delete('data.png');
另外:
imwrite(nx(1,:),'check.png','png')
我参加了 Coursera 机器学习课程,学习神经网络。我从这个link得到了一些手写数字数据:http://yann.lecun.com/exdb/mnist/
现在我想将这些数据转换成.jpg
格式,我正在使用这段代码。
function nx=conv(x)
nx=zeros(size(x));
for i=1:size(x,1)
c=reshape(x(i,:),20,20);
imwrite(c,'data.jpg','jpg')
nx(i,:)=(imread('data.jpg'))(:)';
delete('data.jpg');
end
end
然后,我运行上面的代码:
nx=conv(x);
x
是手写数字的5000个训练样例。每个训练示例都是一个 20 x 20 像素的数字灰度图像。每个像素由一个浮点数表示,表示该位置的灰度强度。
20 x 20 像素网格 "unrolled" 变成一个 400 维向量。这些训练示例中的每一个都成为我们数据矩阵中的一行 x
。这给了我们一个 5000 x 400 矩阵 x
,其中每一行都是手写数字图像的训练示例。
在我 运行 这段代码之后,我将图像重写到磁盘以检查:
imwrite(nx(1,:),'check.jpg','jpg')
但是,我发现图像很模糊。如何正确转换这些图像?
您正在使用 JPEG 保存图像,这是一种用于保存图像的有损 压缩算法。有损压缩算法保证了高压缩比,但代价是稍微降低图像质量。这可能就是您看到模糊图像的原因,因为它是由压缩伪影造成的。
从表面上看,您想要确切地保存数据应该保存到文件中的内容。因此,请改用 lossless 压缩算法,例如 PNG。因此,将您保存的代码行更改为使用 PNG:
imwrite(c,'data.png','png')
nx(i,:)=(imread('data.png'))(:)';
delete('data.png');
另外:
imwrite(nx(1,:),'check.png','png')