Размытие по Гауссу - 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;
};

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.75 из 5
Похожие ответы