Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 无符号字符图像上的快速高斯模糊-ARM Neon Intrinsics-iOS开发_Image Processing_Ios5_Arm_Gaussian_Neon - Fatal编程技术网

Image processing 无符号字符图像上的快速高斯模糊-ARM Neon Intrinsics-iOS开发

Image processing 无符号字符图像上的快速高斯模糊-ARM Neon Intrinsics-iOS开发,image-processing,ios5,arm,gaussian,neon,Image Processing,Ios5,Arm,Gaussian,Neon,有人能告诉我一个快速的函数,用一个5x5的遮罩找到图像的高斯模糊。我需要它的iOS应用程序开发。我的工作直接在内存中的图像定义为 unsigned char *image_sqr_Baseaaddr = (unsigned char *) malloc(noOfPixels); for (row = 2; row < H-2; row++) { for (col = 2; col < W-2; col++) { newPixel = 0;

有人能告诉我一个快速的函数,用一个5x5的遮罩找到图像的高斯模糊。我需要它的iOS应用程序开发。我的工作直接在内存中的图像定义为

unsigned char *image_sqr_Baseaaddr = (unsigned char *) malloc(noOfPixels);

for (row = 2; row < H-2; row++) 
{
    for (col = 2; col < W-2; col++) 
    {
        newPixel = 0;
        for (rowOffset=-2; rowOffset<=2; rowOffset++)
        {
            for (colOffset=-2; colOffset<=2; colOffset++) 
            {
                rowTotal = row + rowOffset;
                colTotal = col + colOffset;
                iOffset = (unsigned long)(rowTotal*W + colTotal);
                newPixel += (*(imgData + iOffset)) * gaussianMask[2 + rowOffset][2 + colOffset];
            }
        }
        i = (unsigned long)(row*W + col);
        *(imgData + i) = newPixel / 159;
    }
}
unsigned char*image\u sqr\u Baseaaddr=(unsigned char*)malloc(noOfPixels);
对于(行=2;行对于(rowOffset=-2;rowOffset在使用NEON进行SIMD优化之前,您应该首先改进标量实现。目前代码的最大问题是,它的实现方式好像是一个不可分离的过滤器,而高斯核是可分离的。通过切换到可分离的实现方式,可以减少数量从N^2到2N的运算量,在5x5内核的情况下,这将是从25个乘法相加减少到10个,也就是说,只需很少的努力,就可以将速度提高2.5倍

可能充分优化的标量实现可以满足您的需求,而无需借助SIMD。如果不需要,则您至少可以将这些标量优化带到矢量化实现中



在使用NEON进行SIMD优化之前,您应该首先改进标量实现。目前代码的最大问题是,它的实现方式好像它是一个不可分离的过滤器,而高斯核是可分离的。通过切换到可分离的实现方式,您可以减少操作的数量orm N^2到2N,在5x5内核的情况下,这将是从25乘加减少到10,也就是说,只需很少的努力就可以将速度提高2.5倍

可能充分优化的标量实现可以满足您的需求,而无需借助SIMD。如果不需要,则您至少可以将这些标量优化带到矢量化实现中


  • 分离内核,如paulr所述
  • 不要重新发明轮子。使用vImage,它是Accelerate框架的一部分,并为您实现向量化的多线程卷积。具体来说,似乎您需要函数
    vImageConvolve\u Planar8
  • 分离内核,如paulr所述
  • 不要重新发明轮子。使用vImage,它是Accelerate框架的一部分,并为您实现向量化的多线程卷积。具体来说,似乎您需要函数
    vImageConvolve\u Planar8

  • 那么,我如何将我的5x5 2D掩码转换为两个1D掩码呢?我在上面添加了一些有用的链接,那么我如何将我的5x5 2D掩码转换为两个1D掩码呢?我在vImage+1上面添加了一些有用的链接,如果这只需要是一个iOS(可能是OS X)解决方案,那么vImage+1就是一个iOS(可能是OS X)解决方案