博客
关于我
Objective-C实现gaussian filter高斯滤波器算法(附完整源码)
阅读量:799 次
发布时间: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实现k nearest neighbours k最近邻分类算法(附完整源码)
    查看>>
    Objective-C实现k-means clustering均值聚类算法(附完整源码)
    查看>>
    Objective-C实现k-Means算法(附完整源码)
    查看>>
    Objective-C实现k-nearest算法(附完整源码)
    查看>>
    Objective-C实现KadaneAlgo计算给定数组的最大连续子数组和算法(附完整源码)
    查看>>
    Objective-C实现kadanes卡达内斯算法(附完整源码)
    查看>>
    Objective-C实现kahns algorithm卡恩算法(附完整源码)
    查看>>
    Objective-C实现karatsuba大数相乘算法(附完整源码)
    查看>>
    Objective-C实现karger算法(附完整源码)
    查看>>
    Objective-C实现KMP搜索算法(附完整源码)
    查看>>
    Objective-C实现Knapsack problem背包问题算法(附完整源码)
    查看>>
    Objective-C实现knapsack背包问题算法(附完整源码)
    查看>>
    Objective-C实现knapsack背包问题算法(附完整源码)
    查看>>
    Objective-C实现knight tour骑士之旅算法(附完整源码)
    查看>>
    Objective-C实现knight Tour骑士之旅算法(附完整源码)
    查看>>
    Objective-C实现KnightTour骑士巡回赛问题算法(附完整源码)
    查看>>
    Objective-C实现KNN算法(附完整源码)
    查看>>
    Objective-C实现KNN算法(附完整源码)
    查看>>
    Objective-C实现KNN算法(附完整源码)
    查看>>
    Objective-C实现knuth morris pratt(KMP)算法(附完整源码)
    查看>>