gpt4 book ai didi

ios - Swift 中高斯图像金字塔的下采样和上采样

转载 作者:IT王子 更新时间:2023-10-29 05:37:31 25 4
gpt4 key购买 nike

简介

我有兴趣编写一个函数,为我输出高斯金字塔的下一层(我最终想创建一个拉普拉斯金字塔)用于图像处理。 (引用链接 https://en.wikipedia.org/wiki/Pyramid_(image_processing)#Gaussian_pyramid)

下采样问题

现在最简单的部分是,当您向下/向上采样时,一个 5 阶滤波器会在调整大小之前与图像进行卷积。

但是,制作图像金字塔的有趣之处在于,您必须根据要前进的方向对图像进行 0.5 或 2 倍的下采样和上采样。 Swift 有几种方法可以做到这一点,例如使用 CIAffineTransform 和 CILanczosTransform,但是我想知道是否有更简单的方法来做到这一点,因为我不关心调整后图像的质量。对于这篇文章,我将使用 Lenna(512x512) 作为示例,如下所示:

The famous Lenna

如果我们想以两倍为因子对图像进行下采样,我们将采用所有奇数像素数据来形成新图像。在 MATLAB 中,这是按如下方式执行的(在高斯模糊之后):

如果 I 是您的输入图像并且大小为 NxM,为 P(一个 512x512x3 矩阵)存储了 3 种颜色映射,那么按 0.5 比例抽取的图像是

R = I(1:2:end, 1:2:end,:)

所有新图像都是以前的图像的奇数列和行。这会产生以下内容,即高斯金字塔第一层的 256x256 照片:

Downsampled Lenna

swift中有这样的东西吗?它在 Core Image 或 OpenGL 自定义过滤器中可行吗?

上采样问题:

上采样实际上仅在创建拉普拉斯金字塔时使用。然而,这样做的幼稚想法是执行以下操作:

初始化 R,这是一个空白图像上下文,其大小与您要上采样的大小相同。在这种情况下,我们将对下采样的 Lenna 照片进行上采样,如上所示,因此 R 必须是 512x512 空白图像。

接下来,将下采样图像的像素值 I 乘以 4。这可以通过将图像与 3x3 矩阵 [0,0,0;0 进行卷积来快速完成,4,0;0,0,0]。然后可以将图像的像素均匀分布到较大的空白图像 R 中。这看起来像:

enter image description here

最后,可以在此图像上使用相同的 5 抽头高斯模糊来恢复上采样图像:

enter image description here

我想知道是否可以在 swift 中采用类似的上采样方法。

我不确定的另一件事是,调整图像大小以进行高斯/拉普拉斯滤波的技术是否真的很重要。如果没有,那么我当然可以使用最快的内置方法而不是尝试自己制作。

最佳答案

GPUImage processing library可以给你一些上采样,并可能导致你的拉普拉斯金字塔

pod 'GPUImage'

锐化上采样:

UIImage *inputImage = [UIImage imageNamed:@"cutelady"];
GPUImagePicture *stillImageSource = [[GPUImagePicture alloc]initWithImage:inputImage];
GPUImageSharpenFilter *stillImageFilter = [[GPUImageSharpenFilter alloc] init];
[stillImageSource addTarget:stillImageFilter];
[stillImageFilter useNextFrameForImageCapture];
[stillImageSource processImage];
UIImage *currentFilteredVideoFrame = [stillImageFilter imageFromCurrentFramebuffer];

LANCZOS 上采样:

UIImage *inputImage = [UIImage imageNamed:@"cutelady"];
GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:inputImage];
GPUImageLanczosResamplingFilter *stillImageFilter = [[GPUImageLanczosResamplingFilter alloc] init];
[stillImageSource addTarget:stillImageFilter];
[stillImageFilter useNextFrameForImageCapture];
[stillImageSource processImage];
[stillImageSource forceProcessingAtSizeRespectingAspectRatio:CGSizeMake(200, 200)];
UIImage *currentFilteredVideoFrame = [stillImageFilter imageFromCurrentFramebuffer];
cell.imageView.image = currentFilteredVideoFrame;

关于ios - Swift 中高斯图像金字塔的下采样和上采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38152806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com