我想比较视频。通过编码C程序比较质量(非模糊)。有人告诉我要学习用于图像分析的DFT(离散傅立叶变换),并使用FFT或DFT工具来了解同一图像的模糊副本与详细(非模糊)副本之间的区别。
(从other question复制):
假设我们有不同的文件,它们具有不同的视频质量,一个文件非常清晰,另一个文件很模糊,一个文件的颜色粗糙。基本上逐帧比较所有文件并报告给质量更高的用户。
那么有人可以帮我吗?
答案 0 :(得分:2)
比方说,我们有各种具有不同视频质量的文件:
- 一个极端为
clear
,另一个极端为blurred
,另一个极端为rough colors
。基本上逐帧比较所有文件,并向用户报告质量更高的文件。
(1)颜色质量检测...
要检查哪种颜色更好,请分析测试图像的直方图。直方图将是多少像素具有强度 X
的计数。其中 X
是一个介于0
到255
之间的数字(因为每个红色,绿色和蓝色通道都拥有256种可能的强度中的任何一种)。
在线上有很多关于如何创建直方图的教程,因为它是计算机图形学中的基本任务。
通常情况如下:
首先创建3个数组(例如: hist_Red
),以保存红色,绿色和蓝色通道的数据。
使用FOR
循环将每个像素分解为单独的R / G / B通道分量:
示例:
temp_Red = this_pixel >> 16 & 0x0ff;
temp_Grn = this_pixel >> 8 & 0x0ff;
temp_Blu = this_pixel >> 0 & 0x0ff;
+1
添加到相关直方图中的特定红色/绿色/蓝色强度。 示例:
hist_Red[ temp_Red ] += 1;
hist_Grn[ temp_Grn ] += 1;
hist_Blu[ temp_Blu ] += 1;
通过添加红色,绿色和蓝色的总和,您将在array
中拥有RGB的总强度,该强度可以构建如下所示的图表。检查图像数组中的值最多,以查找颜色质量更好的图像:
(2)详细检测与模糊检测...
您可以尝试使用卷积滤镜来检测图像中的模糊。给过滤器一个内核(例如:一个矩阵)。下方显示的矩阵(3x3)提供了一个边缘检测过滤器,其中模糊的图像给出了更少的边缘(因此给出了更多的黑色像素)。
使用逻辑假设: more black pixels EQuals a more blurred image (less detail)
。
您可以在这里阅读有关卷积的信息