将RGB转换为灰度,同时保持最高质量

时间:2014-11-24 04:49:39

标签: matlab image-processing video-processing

我有一个需要灰度格式视频的程序。

使用VideoReader

导入时,我需要的正确视频格式如下所示

enter image description here

我收到了一个视频文件,该文件使用VideoReader导入,如下所示:

enter image description here

所以我想将VideoFromat更改为灰度。我找到了这个代码并运行它:

http://www.mathworks.com/matlabcentral/answers/102367-how-do-i-convert-my-video-2-gb-to-uncompressed-avi-grayscale-in-matlab-7-12-r2011a

虽然它确实输出了一个灰度视频,但质量已经大大降低了(很多细节都在一起模糊了,并且在视频中看起来有很多瑕疵)。同一帧的一部分显示了我的意思:

enter image description here

我还将原始视频文件加载到ImageJ中作为灰度,并将其保存为"未压缩的AVI",同样的事情发生。

所以我的问题是

(a)为什么会发生这种情况?

(b)执行转换的最佳方法是什么?

由于

2 个答案:

答案 0 :(得分:2)

这里的问题是您的图像深度为24位,但您使用链接的解决方案将其转换为8位灰度。我认为ImageJ默认做同样的事情。

我认为您可以通过在行

中替换255(2 ^ 24)-1来解决此问题

map = [(0:255)' (0:255)' (0:255)']/255;

和uint8到下一行的uint32。

答案 1 :(得分:2)

图像中的图像质量下降看起来不像是由转换为灰度造成的...它看起来更像是压缩或子采样伪像。 VideoWriter默认使用压缩的Motion JPEG格式。您确定使用的是'Uncompressed Avi'吗?

此外,PROFILE VideoWriter参数的其中一个选项是Grayscale AVI。尝试使用它。您甚至可能不必致电rgb2gray