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

前端之家收集整理的这篇文章主要介绍了ios – Swift中高斯图像金字塔的下采样和上采样前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
介绍

我有兴趣在高斯金字塔(我最终想要创建拉普拉斯金字塔)中为我输出一个功能,用于图像处理. (链接参考https://en.wikipedia.org/wiki/Pyramid_(image_processing)#Gaussian_pyramid)

下采样问题

现在,简单的一部分是当您下/上采样时,5抽头滤波器在调整大小之前与图像进行卷积.

然而,关于制作图像金字塔的有趣部分是,您必须按照0.5或2的因子对图像进行下采样和上采样,具体取决于您要去的方向. Swift有几种方法,例如使用CIAffineTransform和CILanczosTransform,但是我想知道是否有办法更加天真地做,因为我不在乎调整大小的图像的质量.对于这篇文章,我将使用Lenna(512×512)作为示例,如下所示:

如果我们想要将图像下采样一个二分之一,我们将采取所有奇数像素数据形成一个新的图像.在MATLAB中,这样执行如下(高斯模糊之后):

如果我是您的输入图像,并且大小为NxM,则为P(512x512x3矩阵)存储3种颜色的映射,则以.5的比例缩放图像

R = I(1:2:结束,1:2:结束:)

所有新图像都是以前的奇数编号的列和图像的行.这产生了以下,256×256照片是高斯金字塔的第一级:

这样的事情是否存在于迅速?是否可以在Core Image或OpenGL自定义过滤器中执行?

上采样问题:

实际上只有在创建拉普拉斯金字塔时才使用上采样.然而,这样做的天真想法是做以下事情:

初始化R,您要上传的大小的空白图像上下文.在这种情况下,我们将对上采样的Lenna照片进行上采样,因此R必须是512×512空白图像.

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

最后,可以对该图像采用相同的5点高斯模糊来恢复上采样图像:

我想知道是否可以采用类似的上采样方法.

我不确定的另一件事是,如果在高斯/拉普拉斯筛选中调整图像大小的技术非常重要.如果没有,那么当然我可以使用最快的内置方法,而不是试图让我自己.

解决方法

GPUImage processing library可以给你一些抽样,可能会导致你的拉普拉斯金字塔.

pod’GPUImage’

夏普UPSAMPLING:

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 UPSAMPLING:

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相关文章