C#和Matlab读取视频帧rgb值的差异

时间:2014-04-26 02:05:39

标签: c# matlab video rgb

我正在尝试将matlab脚本转换为c#。 matlab脚本读取.avi视频文件,并且对于视频中的每个帧,它计算红色,绿色和蓝色像素的平均值,然后将它们放入矩阵中。因此,我将red.mean,green.mean和blue.mean值存储到视频文件中每个帧的矩阵中。

使用具有AVIreader类的Aforge框架以及为给定图像提供rgb平均值的Image Statistics类在c#im中实现此目的。我遇到的问题是matlab为一个帧计算的平均值,而一个帧的平均值c#计算不匹配。它们是相似的,在彼此的0.5左右,但我觉得它们应该是相同的。

C#使用15个sigfigs作为平均值因此我要求matlab做同样的事情以消除舍入错误的可能性并且它并没有真正改善结果。

所以这是踢球者......

我决定从谷歌中取一个随机的jpeg图像并将其加载到matlab中并将其rgb像素值分成三个单独的矩阵。我选择r矩阵并使用histc()函数来计算有多少r值的值等于0-255范围内的一个数值。

使用相同的图像我在C#中做了完全相同的事情我打开图像将其转换为位图然后使用Aforge的ImageStatistics给我一个图像中r值的直方图。

当我将matlab中给出的直方图与C#中的直方图进行比较时,它们非常相似,但是对于0-255之间的某些值,一个直方图将具有比另一个更大或更小的值。基本上,出于某种原因,C#和Matlab以不同的方式解释图像中的像素值,我想知道为什么?

1 个答案:

答案 0 :(得分:0)

您是否在Matlab中检查过RGB矩阵的数据类型?值可能存储为整数。

>> A=magic(25);
>> B=uint8(A);
>> mean(mean(A))

ans =

  313

>> mean(mean(B))

ans =

 203.1840

>>