iOS實現圖像指定區域模糊
在大多圖像處理中,我們會應用到高斯模糊處理圖像,通常用它來減少圖像噪聲以及降低細節層次。在此文中介紹了高斯模糊的實現和可選區域的模糊【美圖秀秀-背景虛化】
高斯模糊的原理中,它是根據高斯曲線調節像素色值,它是有選擇地模糊圖像。說得直白一點,就是高斯模糊能夠把某一點周圍的像素色值按高斯曲線統計起來,采用數學上加權平均的計算方法得到這條曲線的色值,最后能夠留下人物的輪廓,即曲線.是指當 Adobe Photoshop 將加權平均應用于像素時生成的鐘形曲線。在PS中間,你應該知道所有的顏色不過都是數字,各種模糊不過都是算法。把要模糊的像素色值統計,用數學上加權平均的計算方法(高斯函數)得到色值,對范圍、半徑等進行模糊,大致就是高斯模糊。
高斯模糊算法公式[使用正態分布]
二維圖形表示形式
OpenGL ES 算法實現
1.0 / sqrt(2.0 * M_PI * pow(sigma, 2.0))) * exp(-pow(currentGaussianWeightIndex, 2.0) / (2.0 * pow(sigma, 2.0))
附:GLSL內置指數函數說明圖
在GPUImage中我們可以使用GPUImageGaussianBlurFilter來實現高斯模糊。(GPUImageGaussianBlurFilter僅可以全圖模糊,而不能部分模糊)
texelSpacingMultiplier是模糊的強度,數值越大,模糊效果越明顯
blurRadiusInPixels是像素范圍,用于計算平均值。
高斯模糊應用
1 + (UIImage *)applyGaussianBlur:(UIImage *)image 2 { 3 GPUImageGaussianBlurFilter *filter = [[GPUImageGaussianBlurFilter alloc] init]; 4 // filter.texelSpacingMultiplier = 5.0; 5 filter.blurRadiusInPixels = 1.0; 6 [filter forceProcessingAtSize:image.size]; 7 GPUImagePicture *pic = [[GPUImagePicture alloc] initWithImage:image]; 8 [pic addTarget:filter]; 9 [pic processImage]; 10 [filter useNextFrameForImageCapture]; 11 return [filter imageFromCurrentFramebuffer]; 12 }
GPUImageGaussianSelectiveBlurFilter可以部分模糊,也就是選區外模糊
excludeCircleRadius用來調整模糊區域
+ (UIImage *)applyGaussianSelectiveBlur:(UIImage *)image { GPUImageGaussianSelectiveBlurFilter *filter = [[GPUImageGaussianSelectiveBlurFilter alloc] init]; // filter.texelSpacingMultiplier = 5.0; filter.excludeCircleRadius = 120 / 320.0; [filter forceProcessingAtSize:image.size]; GPUImagePicture *pic = [[GPUImagePicture alloc] initWithImage:image]; [pic addTarget:filter]; [pic processImage]; [filter useNextFrameForImageCapture]; return [filter imageFromCurrentFramebuffer]; }
本文由用戶 zhangkaijun 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!