【问题标题】:Efficient downsampling with core image使用核心图像进行高效下采样
【发布时间】:2016-09-02 05:03:35
【问题描述】:

根据获得最佳性能页面,

使用 Core Graphics 或 Image I/O 函数进行裁剪或下采样,例如函数 CGImageCreateWithImageInRect 或 CGImageSourceCreateThumbnailAtIndex。

但是,我想知道如果您只在 Core Image 中工作以进行图像处理,这有多真实。如果我有一个需要下采样然后过滤的图像以及其他东西,那么转换为CGImage,下采样,然后转换回CIImage用于其他用途的效率会不会降低?

我想知道如果下采样是您正在执行的图像处理算法的一部分,那么在 Core Image 框架中工作是否会更好。当然,如果上述方法更快,我想试一试,但我不确定是否有其他方法可以尽可能快地对某些东西进行下采样。不,不幸的是,CILanczosScaleTransform 非常慢,我希望 Core Image 有一个更快的内置方法来缩放图像。

【问题讨论】:

    标签: ios swift core-graphics core-image


    【解决方案1】:

    我正在使用下面的代码,这是我在这里找到的:

    http://flexmonkey.blogspot.com/2014/12/scaling-resizing-and-orienting-images.html

    extension UIImage {
        public func resizeToBoundingSquare(_ boundingSquareSideLength : CGFloat) -> UIImage {
            let imgScale = self.size.width > self.size.height ? boundingSquareSideLength / self.size.width : boundingSquareSideLength / self.size.height
            let newWidth = self.size.width * imgScale
            let newHeight = self.size.height * imgScale
            let newSize = CGSize(width: newWidth, height: newHeight)
            UIGraphicsBeginImageContext(newSize)
            self.draw(in: CGRect(x: 0, y: 0, width: newWidth, height: newHeight))
            let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext();
            return resizedImage!
        }
    }
    

    在缩小尺寸和/或使各种像素大小保持一致后,我会使用 CI 过滤器,包括自定义过滤器和链接过滤器。我没有发现任何性能或内存问题。

    【讨论】:

    • 这里的问题似乎是您的扩展程序适用于 UIImages,这意味着如果您处于链接的中间,您必须进行转换。
    • 其实没有。我的应用程序执行以下顺序:加载到 UIImage...缩小尺寸...创建 CIImage...CIFilter(1)...CIKernel(1)...CIKernel(2)...CIFilter(2)... UIImage
    【解决方案2】:

    我认为通过在 CIImage 本身上使用 CGAffineTransform(scale X, y),我已经看到了最快的性能。我尝试了 CGImagesource 缩略图方法,并且开销方式超过了任何好处,可能是由于必须进行更多的源转换。请注意,我从 CVSampleBuffer 开始,所以我的链如下:

    CVSampleBuffer -> CIImage -> 使用 CGAffineTransform 进行下采样 -> CIFiltering 使用过滤器链...直接输入到 VNRequest。我可以使用这种方法获得 60Hz 直接来自相机的实时处理,尽管我想进一步优化它,这就是为什么我正在寻找更快的选择!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      • 2015-10-10
      • 2014-05-04
      相关资源
      最近更新 更多