使用BRISQUE功能检测放大的图像

时间:2019-12-10 12:55:47

标签: python machine-learning image-processing artificial-intelligence image-quality

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

我有一个200张4K图像的数据集,我已将它们缩小为1080p,并使用Lanczos和Bicubic插值方法还原为4K。

我的想法是使用这些图像的BRISQUE功能来确定图像是否已放大。

这是我目前拥有的:

Density plot of BRISQUE features from pybrisque

我使用python implementation of BRISQUE来获取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,]

我尝试过的事情:

我尝试使用支持向量分类器对这些图像进行分类,但是由于所有图像都被归类为“放大”,所以我做错了。我的猜测是,这是由于要素彼此之间过于靠近,并且在不同区域无法实现高密度/原始效果。因此,似乎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 ]]

Scatter plot of BRISQUE Features

0 个答案:

没有答案