如何使用图像比较评估图像质量

时间:2018-10-07 14:38:54

标签: image-processing fft video-processing dft

我想比较视频。通过编码C程序比较质量(非模糊)。有人告诉我要学习用于图像分析的DFT(离散傅立叶变换),并使用FFT或DFT工具来了解同一图像的模糊副本与详细(非模糊)副本之间的区别。

(从other question复制):
假设我们有不同的文件,它们具有不同的视频质量,一个文件非常清晰,另一个文件很模糊,一个文件的颜色粗糙。基本上逐帧比较所有文件并报告给质量更高的用户。

那么有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

  

比方说,我们有各种具有不同视频质量的文件:

     
      
  • 一个极端为clear,另一个极端为blurred,另一个极端为rough colors
  •   
     

基本上逐帧比较所有文件,并向用户报告质量更高的文件。

(1)颜色质量检测...

要检查哪种颜色更好,请分析测试图像的直方图。直方图将是多少像素具有强度 X 的计数。其中 X 是一个介于0255之间的数字(因为每个红色,绿色和蓝色通道都拥有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)

您可以在这里阅读有关卷积的信息