我的目标是使用Bicubic,Billinear,Lanczos,EDSR等方法从较低分辨率下放大的图像中识别出真正的4K图像。
我有一个200张4K图像的数据集,我已将它们缩小为1080p,并使用Lanczos和Bicubic插值方法还原为4K。
我的想法是使用这些图像的BRISQUE功能来确定图像是否已放大。
这是我目前拥有的:
我使用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 ]]