我正在尝试将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以不同的方式解释图像中的像素值,我想知道为什么?
答案 0 :(得分:0)
您是否在Matlab中检查过RGB矩阵的数据类型?值可能存储为整数。
>> A=magic(25);
>> B=uint8(A);
>> mean(mean(A))
ans =
313
>> mean(mean(B))
ans =
203.1840
>>