我在Matlab和C#中读取了相同的图像,然后比较了RGB通道值,发现存在轻微的差异(大约4%的像素在3和-3之间变化)。
造成这种差异的原因是什么? 这是可以解决的问题吗?
我在Matlab中使用了imread,在C#中使用了以下代码(处理0-255像素值)
Image Im1 = Image.FromFile("D:/VisualStudio2013/haarwt/haarwt/highcontrast1_512.jpg");
Bitmap bmp = new Bitmap(Im1);
Color c;
double[,] Red = new double[bmp.Width, bmp.Height];
double[,] Green = new double[bmp.Width, bmp.Height];
double[,] Blue = new double[bmp.Width, bmp.Height];
for (int j = 0; j < bmp.Height; j++)
{
for (int i = 0; i < bmp.Width; i++)
{
c = bmp.GetPixel(i, j);
Red[i, j] = (double)c.R;
Green[i, j] = (double)c.G;
Blue[i, j] = (double)c.B;
}
}
答案 0 :(得分:3)
您正在阅读.jpg文件。 Jpg文件使用有损压缩。也就是说,通过编码然后解码图像不保留精确值。你经历的是不同的,但相关的。 使用有损压缩保存图像时,像素的精确值会丢失,这意味着解压缩算法的任务是“猜测”#34;值。这为解压缩算法的实现留下了不同的空间,可能是您遇到的原因。
Jpeg压缩/解压缩协同工作使这些差异很小并且很难被注意到,但是存在变化。