Мне нужно выполнить простую математическую операцию с Data
, содержащим данные пикселей RGB. Сейчас я делаю это так:
let imageMean: Float = 127.5
let imageStd: Float = 127.5
let rgbData: Data // Some data containing RGB pixels
let floats = (0..<rgbData.count).map {
(Float(rgbData[$0]) - imageMean) / imageStd
}
return Data(bytes: floats, count: floats.count * MemoryLayout<Float>.size)
Это работает, но слишком медленно. Я надеялся, что смогу использовать структуру Accelerate
, чтобы вычислить это быстрее, но понятия не имел, как это сделать. Я зарезервировал немного места, чтобы оно не выделялось каждый раз при запуске этой функции, например:
inputBufferDataNormalized = malloc(width * height * 3) // 3 channels RGB
Я пробовал несколько функций, например vDSP_vasm
, но не смог заставить их работать. Может ли кто-нибудь посоветовать мне, как его использовать? В основном мне нужно заменить эту функцию карты, потому что это занимает слишком много времени. И, наверное, было бы здорово использовать все время заранее выделенное пространство.