博客
关于我
Objective-C实现gaussian filter高斯滤波器算法(附完整源码)
阅读量:798 次
发布时间:2023-02-19

本文共 3244 字,大约阅读时间需要 10 分钟。

Objective-C?????????

?????????????????????????????????????Objective-C?????????????????????????????????????????Objective-C?????????

????????

??????????????????????????

[ G(x, y) = \frac{1}{\sigma \sqrt{2\pi}} e^{-\frac{(x - x_0)^2 + (y - y_0)^2}{2\sigma^2}} ]
???((x_0, y_0))????????(\sigma)??????????

????????????????????????????????????

Objective-C????

?Objective-C????????????????????

  • ????????

    ???????????????????????????????????????????????

  • ?????????

    ???????????????????????????????????????????

  • ????

    ????????????????????????????????????????Objective-C???????????

  • ????

    ???????????????

  • ??????

    ????????Objective-C?????????????

    #import 
    @interface GaussianFilter : NSObject- (NSArray *)applyFilterToImage:(NSData *)imageData;@end

    ??????

    #import 
    #include
    // ??????Accelerate??@interface GaussianFilter : NSObject- (NSData *)filterImageData:(NSData *)data;@end@implementation GaussianFilter- (NSData *)filterImageData:(NSData *)data { // ??????? double sigma = 1.0; // ???????? int filterSize = (int)(sigma * 2.0 * sqrt(2)); // ????? int halfSize = filterSize / 2; // ???????? double *filter = calloc(filterSize, sizeof(double)); for (int i = 0; i < filterSize; i++) { for (int j = 0; j < filterSize; j++) { int dx = abs(i - halfSize); int dy = abs(j - halfSize); filter[i * filterSize + j] = exp(-sigma * sigma * (dx * dx + dy * dy) / 2); } } // ?????? NSImage *image = (NSImage *)[UIImage dataWithData:data]; NSImage *resultImage = [[UIImage alloc] init]; // ????? NSData *grayData = [image dataWithMappingOption: NSImageMappingGray]; // ????? unsigned char *grayBuffer = (unsigned char *)grayData.data; unsigned char *resultBuffer = (unsigned char *)[resultImage dataWithMappingOption: NSImageMappingGray]; for (int y = 0; y < image.height; y++) { for (int x = 0; x < image.width; x++) { // ???????? double sum = 0.0; for (int fi = 0; fi < filterSize; fi++) { for (int fj = 0; fj < filterSize; fj++) { int srcX = x + fi - halfSize; int srcY = y + fj - halfSize; if (srcX >= 0 && srcX < image.width && srcY >= 0 && srcY < image.height) { sum += grayBuffer[srcY * image.width + srcX] * filter[fi * filterSize + fj]; } } } // ?????? unsigned char *newPixel = (unsigned char *)&resultBuffer[y * resultImage.width + x]; newPixel = (unsigned char)((sum / filterSize) * 255); // ????????????? resultBuffer[y * resultImage.width + x] = newPixel; } } return [resultImage dataWithMappingOption: NSImageMappingGray];}@end

    ????

  • ??????????????????????????????????????????????????????????????

  • ???????????????(\sigma)?????????????(\sigma)????????????????(\sigma)????????????

  • ?????????????????????????????????????????????Accelerate???????????????????

  • ??????????????????????????????????????????????????????

  • ??

    ???????????????Objective-C??????????????????????????????????????????????????????????????????????????????

    转载地址:http://zvnfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C享元模式(Flyweight)
    查看>>
    Objective-C以递归的方式实现二叉搜索树算法(附完整源码)
    查看>>
    Objective-C内存管理教程和原理剖析(三)
    查看>>
    Objective-C实现 Greedy Best First Search最佳优先搜索算法(附完整源码)
    查看>>
    Objective-C实现 jugglerSequence杂耍者序列算法 (附完整源码)
    查看>>
    Objective-C实现 lattice path格子路径算法(附完整源码)
    查看>>
    Objective-C实现1000 位斐波那契数算法(附完整源码)
    查看>>
    Objective-C实现2 个数字之间的算术几何平均值算法(附完整源码)
    查看>>
    Objective-C实现2d 表面渲染 3d 点算法(附完整源码)
    查看>>
    Objective-C实现2D变换算法(附完整源码)
    查看>>
    Objective-C实现3n+1猜想(附完整源码)
    查看>>
    Objective-C实现3n+1猜想(附完整源码)
    查看>>
    Objective-C实现9x9乘法表算法(附完整源码)
    查看>>
    Objective-C实现9×9二维数组数独算法(附完整源码)
    查看>>
    Objective-C实现A*(A-Star)算法(附完整源码)
    查看>>
    Objective-C实现A-Star算法(附完整源码)
    查看>>
    Objective-C实现abbreviation缩写算法(附完整源码)
    查看>>
    Objective-C实现ABC人工蜂群算法(附完整源码)
    查看>>
    Objective-C实现activity selection活动选择问题算法(附完整源码)
    查看>>
    Objective-C实现AC算法(Aho-Corasick) 算法(附完整源码)
    查看>>