首页 > 解决方案 > 如何使用图像比较评估图像质量

问题描述

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

(从其他问题复制):
假设我们有不同视频质量的不同文件,一个非常清晰,另一个模糊,一个颜色粗糙。基本上逐帧比较所有文件,并向用户报告质量更好的文件。

那么任何人都可以帮我解决这个问题吗?

标签: image-processingfftvideo-processingdft

解决方案


假设我们有各种具有不同视频质量的文件:

  • 一是极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;

通过添加红色、绿色和蓝色的总和,您将获得 RGB 的总强度array,可以构建如下图。检查图像的数组具有大多数值以找到具有更好颜色质量的图像:

(2) 详细与模糊检测...

您可以尝试使用卷积过滤器来检测图像中的模糊。给过滤器一个内核(例如:一个矩阵)。下面显示的矩阵 (3x3) 给出了一个边缘检测滤波器,其中模糊图像产生的边缘较少(因此产生更多的黑色像素)。

使用逻辑假设:more black pixels EQuals a more blurred image (less detail)

您可以在此处阅读有关卷积的信息


推荐阅读