image-processing - 如何使用图像比较评估图像质量
问题描述
我想比较视频。通过编写 C 程序来比较质量(非模糊)。有人告诉我要了解用于图像分析的 DFT(离散傅里叶变换),并使用 FFT 或 DFT 工具来了解同一图像的模糊副本与详细(非模糊)副本之间的区别。
(从其他问题复制):
假设我们有不同视频质量的不同文件,一个非常清晰,另一个模糊,一个颜色粗糙。基本上逐帧比较所有文件,并向用户报告质量更好的文件。
那么任何人都可以帮我解决这个问题吗?
解决方案
假设我们有各种具有不同视频质量的文件:
- 一是极
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)
。
您可以在此处阅读有关卷积的信息
推荐阅读
- laravel - 谷歌将阻止所有从嵌入式浏览器框架登录谷歌账户
- node.js - 带参数的 SQL 触发器
- typescript - 如何维护别名属性的 DocBlock 注释?
- c++ - 数字交换:如何让这个程序的主函数调用引用函数?
- json - 500 无法在 perl 中使用 lwp 连接到 url
- reactjs - 在 react-native 中使用提示获取“TypeError:null 不是对象”
- sql - SQL计算GBQ中表中的不同行数
- vuejs2 - 如何从nuxt js中asyncData中的组件调用插件方法
- java - 使用 Hikari 版本设置 ConnectionInitSql 时出错:3.4.5
- azure - 如何更改 Azure 函数中的 PowerShell 文化