Размытие по Гауссу - C#
Формулировка задачи:
Ребят, помогите пожалуйста с размытием(конечная цель восстановления размытия по Гауссу).
Программа размывает только верхний участок изображения.
Заранее благодарю
unsafe void Transform(Bitmap bmp) { var bd = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat); int s = Image.GetPixelFormatSize(bmp.PixelFormat) / 8; // число бит на пиксель int width = bmp.Width * s, height = bmp.Height; byte[, ,] res = new byte[3, height, width]; double acR,acG,acB; int radius = 30; int size = 2 * radius + 6; for (int h = 0; h < height; h++) { for (int w = 0; w < width; w = w + s) { byte* curpos = (byte*)bd.Scan0 + h * bd.Stride; int R = curpos[w]; int G = curpos[w + 1]; int B = curpos[w + 2]; acR = R * (Math.Pow((double)Math.E, -(Math.Pow((double)w - size / 2, 2) + Math.Pow((double)h - size / 2, 2)) / (2 * Math.Pow((double)radius, 2)))); acG = G * (Math.Pow((double)Math.E, -(Math.Pow((double)w - size / 2, 2) + Math.Pow((double)h - size / 2, 2)) / (2 * Math.Pow((double)radius, 2)))); acB = B * (Math.Pow((double)Math.E, -(Math.Pow((double)w - size / 2, 2) + Math.Pow((double)h - size / 2, 2)) / (2 * Math.Pow((double)radius, 2)))); curpos[ w ] = (byte)acR; curpos[w + 1] = (byte)acG; curpos[w + 2] = (byte)acB; } }
Решение задачи: «Размытие по Гауссу»
textual
Листинг программы
int gaussCoef(double sigma, double a[3], double *b0) { double sigma_inv_4; sigma_inv_4 = sigma*sigma; sigma_inv_4 = 1.0/(sigma_inv_4*sigma_inv_4); double coef_A = sigma_inv_4*(sigma*(sigma*(sigma*1.1442707+0.0130625)-0.7500910)+0.2546730); double coef_W = sigma_inv_4*(sigma*(sigma*(sigma*1.3642870+0.0088755)-0.3255340)+0.3016210); double coef_B = sigma_inv_4*(sigma*(sigma*(sigma*1.2397166-0.0001644)-0.6363580)-0.0536068); double z0_abs = exp(coef_A); double z0_real = z0_abs*cos(coef_W); double z0_im = z0_abs*sin(coef_W); double z2 = exp(coef_B); double z0_abs_2 = z0_abs*z0_abs; a[2] = 1.0/(z2*z0_abs_2); a[0] = (z0_abs_2+2*z0_real*z2)*a[2]; a[1] = -(2*z0_real+z2)*a[2]; *b0 = 1.0 - a[0] - a[1] - a[2]; return 0; };
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д