Swift 中的图像相似度

问题描述 投票:0回答:1

快速视觉相似性功能能够为两幅图像之间的差异分配一个数字。 如果图像之间的方差为 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!)
swift apple-vision
1个回答
4
投票

这取决于您想要如何扩展它。如果您只想要百分比,您可以使用 Float.greatestFiniteMagnitude 作为最大值。

1-(distance/Float.greatestFiniteMagnitude)*100

更好的解决方案可能是设置一个较低的上限,高于该上限的所有内容都将是 0% 相似度。

1-(min(distance, 10)/10)*100

此处的人造天花板为 10,但它可以是任意数字。

© www.soinside.com 2019 - 2024. All rights reserved.