我有一个图像,应该在传递到CoreML之前进行预处理,以640x640平方与大小调整和保存纵横比(检查图像).我发现了很多有用的链接使用vImageScale_*调整大小,但还没有找到任何类似的添加彩色填充到调整大小的图像.我知道Vision有scaleFitoption,但最终输出有点不同,所以我试图使图像居中。
vImageScale_*
scaleFit
fnx2tebb1#
vImageScale_*函数缩放以适合目标,因此如果源和目标的纵横比不同,纵横比也会改变。vImage提供仿射变换操作(支持背景色!)。请查看https://developer.apple.com/documentation/accelerate/applying_geometric_transforms_to_images了解更多信息。最后一个示例 Apply a Complex Affine Transform to a vImage Buffer 完全符合您的需要(您只需删除旋转步骤)。
mlnl4t2r2#
彩色填充将是类似于vImageBufferFill_ARGB8888的内容,中间位将是vImageScale_ARGB8888。由于缩放操作使用整数高度、宽度和原点,因此无需担心区域之间接缝处内容的抗锯齿。请注意,使用CGBitmapContextRef和CGContextDrawImage(CGContextRef,CGRect,CGImageRef)也相对容易,尽管CG只使用Lanczos2重采样器。您将有更少的细节来微观管理图像方向和色彩空间转换,并且它允许小数像素放置。你也可以使用vImage来获得小数像素的位置,但是需要使用AffineWarp或者剪切函数。我可能不会尝试做太多的图像处理,以防振铃有一些奇怪的影响。一个简单的低通滤波器+双线性插值可能是尝试。这将是一个有点模糊的人眼,但可能会避免饲料伪像的训练工作量。大概有大量关于ML图像预处理的文献可以为您提供指导。
2条答案
按热度按时间fnx2tebb1#
vImageScale_*
函数缩放以适合目标,因此如果源和目标的纵横比不同,纵横比也会改变。vImage提供仿射变换操作(支持背景色!)。请查看https://developer.apple.com/documentation/accelerate/applying_geometric_transforms_to_images了解更多信息。最后一个示例 Apply a Complex Affine Transform to a vImage Buffer 完全符合您的需要(您只需删除旋转步骤)。
mlnl4t2r2#
彩色填充将是类似于vImageBufferFill_ARGB8888的内容,中间位将是vImageScale_ARGB8888。由于缩放操作使用整数高度、宽度和原点,因此无需担心区域之间接缝处内容的抗锯齿。
请注意,使用CGBitmapContextRef和CGContextDrawImage(CGContextRef,CGRect,CGImageRef)也相对容易,尽管CG只使用Lanczos2重采样器。您将有更少的细节来微观管理图像方向和色彩空间转换,并且它允许小数像素放置。
你也可以使用vImage来获得小数像素的位置,但是需要使用AffineWarp或者剪切函数。我可能不会尝试做太多的图像处理,以防振铃有一些奇怪的影响。一个简单的低通滤波器+双线性插值可能是尝试。这将是一个有点模糊的人眼,但可能会避免饲料伪像的训练工作量。大概有大量关于ML图像预处理的文献可以为您提供指导。