Matlab与C#图像像素值

时间:2015-11-08 23:01:02

标签: c# matlab image-processing

我在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;


                }
            }

1 个答案:

答案 0 :(得分:3)

您正在阅读.jpg文件。 Jpg文件使用有损压缩。也就是说,通过编码然后解码图像不保留精确值。你经历的是不同的,但相关的。 使用有损压缩保存图像时,像素的精确值会丢失,这意味着解压缩算法的任务是“猜测”#34;值。这为解压缩算法的实现留下了不同的空间,可能是您遇到的原因。

Jpeg压缩/解压缩协同工作使这些差异很小并且很难被注意到,但是存在变化。