快速视觉相似性功能能够为两幅图像之间的差异分配一个数字。 如果图像之间的方差为 0,则意味着图像是相同的。 随着数量的增加,图像之间的差异越来越大。
我想做的是将其转化为相似度的百分比。例如,一张图像与另一张图像有 80% 的相似度。 任何想法如何安排逻辑来完成此任务:
import UIKit
import Vision
func featureprintObservationForImage(atURL url: URL) -> VNFeaturePrintObservation? {
let requestHandler = VNImageRequestHandler(url: url, options: [:])
let request = VNGenerateImageFeaturePrintRequest()
do {
try requestHandler.perform([request])
return request.results?.first as? VNFeaturePrintObservation
} catch {
print("Vision error: \(error)")
return nil
}
}
let apple1 = featureprintObservationForImage(atURL: Bundle.main.url(forResource:"apple1", withExtension: "jpg")!)
let apple2 = featureprintObservationForImage(atURL: Bundle.main.url(forResource:"apple2", withExtension: "jpg")!)
let pear = featureprintObservationForImage(atURL: Bundle.main.url(forResource:"pear", withExtension: "jpg")!)
var distance = Float(0)
try apple1!.computeDistance(&distance, to: apple2!)
var distance2 = Float(0)
try apple1!.computeDistance(&distance2, to: pear!)
这取决于您想要如何扩展它。如果您只想要百分比,您可以使用 Float.greatestFiniteMagnitude 作为最大值。
1-(distance/Float.greatestFiniteMagnitude)*100
更好的解决方案可能是设置一个较低的上限,高于该上限的所有内容都将是 0% 相似度。
1-(min(distance, 10)/10)*100
此处的人造天花板为 10,但它可以是任意数字。