我的目标是从使用 Bicubic、Billinear、Lanczos、EDSR 等方法从较低分辨率放大的图像中识别出真正的 4K 图像。
我有一个包含 200 个 4K 图像的数据集,我已经通过 Lanczos 和双三次插值将其缩小到 1080p 并返回到 4K。
我的想法是使用这些图像的 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 ]]