首页 > 解决方案 > 使用 BRISQUE 特征检测放大图像

问题描述

我的目标是从使用 Bicubic、Billinear、Lanczos、EDSR 等方法从较低分辨率放大的图像中识别出真正的 4K 图像。

我有一个包含 200 个 4K 图像的数据集,我已经通过 Lanczos 和双三次插值将其缩小到 1080p 并返回到 4K。

我的想法是使用这些图像的 BRISQUE 特征来识别图像是否被放大。

这是我目前拥有的:

来自 pybrisque 的 BRISQUE 特征的密度图

我使用BRISQUE 的 python 实现来获取 3 个相同图像的 BRISQUE 特征并对其进行缩放;

import brisque 
brisq = BRISQUE()
features = brisq.get_feature('path_to_img')
features = brisq._scale_feature(features)
# This gives me a vector of [36,], some examples shown in code block below

其中 2 个已从标记的 1080p 分辨率升级。从密度图中,我们可以清楚地看到真正的 4K 图像和放大图像之间存在差异。

我的问题是;怎么办?我有这些特征,我们可以从密度图中看出区别,但我一直没能找到对这些图像进行分类的方法。我对我可以使用的任何替代方法持开放态度。我将不胜感激任何帮助/建议!

在实际的 BRISQUE 实现中,他们使用了支持向量回归模型来返回 [0,100] 的质量分数。但是,我想要做的是让模型能够根据这些特征将图像分类为放大/原始图像;[36,] 的向量

我试过的:

我尝试使用支持向量分类器对这些图像进行分类,但我一定做错了,因为所有图像都被归类为 Upscaled。我的猜测是,这是由于特征彼此过于接近,并且在不同区域中对于放大/原始的特征并不密集。所以看起来 SVC 绝对不是要走的路。

我尝试添加所有特征的 abs(),希望这可以让我有 2 个密集集群的散点图,但特征仍然分散在周围。

clf = svm.SVC(gamma='auto') 
X = np.asarray(X)
X = X.squeeze()
y = np.asarray(y)
clf = clf.fit(X,y.ravel())
print(X)

# These are the scaled feature vectors of [36,] y contains my categories Upscaled/Original

[[-0.65742082 -0.60651108 -0.38406828 ...  0.13391201 -0.77064699
  -0.66440166]
 [-0.67936245 -0.66312799 -0.40825036 ... -0.04571298 -0.75259527
  -0.72149044]
 [-0.6176775  -0.3162819  -0.25604552 ... -0.08188693 -0.22914459
  -0.04314284]
 ...
 [-0.58745601 -0.65824511 -0.31152205 ...  0.53725558 -0.73736713
  -0.40638184]
 [-0.65079694 -0.84827717 -0.41251778 ...  0.40268912 -0.94145548
  -0.83813568]
 [-0.64831298 -0.74385767 -0.41820768 ...  0.38536    -0.83109257
  -0.6435719 ]]

BRISQUE 特征的散点图

标签: pythonmachine-learningimage-processingartificial-intelligenceimage-quality

解决方案


推荐阅读