Matlab vs C# 图像像素值

Posted

技术标签:

【中文标题】Matlab vs C# 图像像素值【英文标题】:Matlab vs C# Image pixel values 【发布时间】:2015-11-08 23:01:02 【问题描述】:

我在 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】:

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

Jpeg 压缩/解压缩协同工作,使这些差异很小且难以察觉,但变化是存在的。

【讨论】:

嗯,好的,所以没有问题要修复...这只是由于有损压缩图像...谢谢....

以上是关于Matlab vs C# 图像像素值的主要内容,如果未能解决你的问题,请参考以下文章

matlab - 将图像像素值连接成一行或一列数据

OpenCV 读取图像并使用整数值管理它们的像素(如 matlab)

如何获取PNG图片某点像素的rgba值

如何用matlab减小图像的灰度级别

在图像中随机更改像素值程序——matlab

Radon变换——MATLAB