tidal sonido para nocturno mejores mejorar ecualizadores ecualizador calidad iphone ios image-processing uiimage

iphone - para - mejorar sonido ipad



¿Cómo difumino un UIImage, pero preservando los límites de objetos agudos? (1)

El desenfoque que estás buscando aquí se llama desenfoque bilateral. A diferencia de un desenfoque Gaussiano estándar, los colores de los píxeles circundantes se promedian con el color del píxel central en función de su similitud con el píxel central. Esto desenfoca las regiones interiores de los objetos, pero conserva un contorno nítido.

En mi marco de GPUImage de código abierto, tengo un filtro que hace esto, llamado GPUImageBilateralFilter. Este es el resultado de eso cuando se aplica a su imagen (usando un blurSize de 1.0 y un distanceNormalizationFactor de 1.6):

Hay algunas pequeñas diferencias entre mi resultado y tu objetivo, pero eso probablemente se deba a las ponderaciones específicas que uso. Al ajustar los parámetros aquí, debería poder acercar esto a lo anterior.

OpenCV también tiene filtros borrosos bilaterales, y podría tomar el código fuente de mi shader de fragmentos y usarlo para construir su propia implementación de OpenGL ES si desea usarlo fuera de este marco:

uniform sampler2D inputImageTexture; const lowp int GAUSSIAN_SAMPLES = 9; varying highp vec2 textureCoordinate; varying highp vec2 blurCoordinates[GAUSSIAN_SAMPLES]; uniform mediump float distanceNormalizationFactor; void main() { lowp vec4 centralColor; lowp float gaussianWeightTotal; lowp vec4 sum; lowp vec4 sampleColor; lowp float distanceFromCentralColor; lowp float gaussianWeight; centralColor = texture2D(inputImageTexture, blurCoordinates[4]); gaussianWeightTotal = 0.18; sum = centralColor * 0.18; sampleColor = texture2D(inputImageTexture, blurCoordinates[0]); distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0); gaussianWeight = 0.05 * (1.0 - distanceFromCentralColor); gaussianWeightTotal += gaussianWeight; sum += sampleColor * gaussianWeight; sampleColor = texture2D(inputImageTexture, blurCoordinates[1]); distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0); gaussianWeight = 0.09 * (1.0 - distanceFromCentralColor); gaussianWeightTotal += gaussianWeight; sum += sampleColor * gaussianWeight; sampleColor = texture2D(inputImageTexture, blurCoordinates[2]); distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0); gaussianWeight = 0.12 * (1.0 - distanceFromCentralColor); gaussianWeightTotal += gaussianWeight; sum += sampleColor * gaussianWeight; sampleColor = texture2D(inputImageTexture, blurCoordinates[3]); distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0); gaussianWeight = 0.15 * (1.0 - distanceFromCentralColor); gaussianWeightTotal += gaussianWeight; sum += sampleColor * gaussianWeight; sampleColor = texture2D(inputImageTexture, blurCoordinates[5]); distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0); gaussianWeight = 0.15 * (1.0 - distanceFromCentralColor); gaussianWeightTotal += gaussianWeight; sum += sampleColor * gaussianWeight; sampleColor = texture2D(inputImageTexture, blurCoordinates[6]); distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0); gaussianWeight = 0.12 * (1.0 - distanceFromCentralColor); gaussianWeightTotal += gaussianWeight; sum += sampleColor * gaussianWeight; sampleColor = texture2D(inputImageTexture, blurCoordinates[7]); distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0); gaussianWeight = 0.09 * (1.0 - distanceFromCentralColor); gaussianWeightTotal += gaussianWeight; sum += sampleColor * gaussianWeight; sampleColor = texture2D(inputImageTexture, blurCoordinates[8]); distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0); gaussianWeight = 0.05 * (1.0 - distanceFromCentralColor); gaussianWeightTotal += gaussianWeight; sum += sampleColor * gaussianWeight; gl_FragColor = sum / gaussianWeightTotal; }

Me gustaría realizar un desenfoque "inteligente" en un UIImage, donde los contenidos son borrosos, pero los bordes permanecen nítidos.

Por ejemplo, aquí está mi imagen original:

y esto es lo que me gustaría ver después de aplicar este desenfoque:

¿Cómo puedo hacer un desenfoque "inteligente" como este en un UIImage?