Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 指数函数返回零_C#_Image_Image Processing - Fatal编程技术网

C# 指数函数返回零

C# 指数函数返回零,c#,image,image-processing,C#,Image,Image Processing,我试图画出下面的链接中的指数函数的值,但是,它们总是零。我正试图画纸上显示的灰色图像。你对此有什么建议?谢谢 位图bm=(位图)pictureBox1.Image; 位图bmp=新位图(pictureBox1.Image.Width,pictureBox1.Image.Height); 颜色=新颜色(); 双Cb,Cr,r,g,b,r,g,b; 双CbMean=156.56//150.3179; 双平均值=117.43//117.1057; 双K1=160.13; 双K2=12.143; 双

我试图画出下面的链接中的指数函数的值,但是,它们总是零。我正试图画纸上显示的灰色图像。你对此有什么建议?谢谢

位图bm=(位图)pictureBox1.Image;
位图bmp=新位图(pictureBox1.Image.Width,pictureBox1.Image.Height);
颜色=新颜色();
双Cb,Cr,r,g,b,r,g,b;
双CbMean=156.56//150.3179;
双平均值=117.43//117.1057;
双K1=160.13;
双K2=12.143;
双K3=12.143;
双K4=299.46;
对于(int i=0;idouble gmm=Math.Exp(dist*dist1);//在将
dist
dist1
的值传递给
Math.Exp()
之前,是否检查过它们的值不为零。我怀疑
Convert.ToDouble(color.R)
不起作用。可能需要类似
R=(double)bm.GetPixel(x,y)的东西.R/255;
@FelixCastor谢谢,我检查了dist和dist1的值,它们不是零。此外,我还检查了RGB的值。它正在工作。是
dist
还是
dist1
中的一个为负?如果是,那么
(dist*dist
)`将是负数,因此,
gmm
可能非常小。@Rogerowland是的,其中一个是负数。在我看来,您应该计算一个概率,然后设置阈值,以决定是否将像素设置为白色或黑色。如果您想显示概率首先,尝试重新缩放,比如
int-luma=(int)(255.0*gmm)
。当前方程
(gmm*0.3)+(gmm*0.59)+(gmm*0.11)
gmm
正好相等!
Bitmap bm = (Bitmap)pictureBox1.Image;
            Bitmap bmp = new Bitmap(pictureBox1.Image.Width, pictureBox1.Image.Height);
            Color color = new Color();
            double Cb,Cr,r,g,b,R,G,B; 
            double CbMean = 156.56;//150.3179;
            double CrMean = 117.43;//117.1057;
            double K1 = 160.13;
            double K2 = 12.143;
            double K3 = 12.143;
            double K4 = 299.46;

            for (int i = 0; i < pictureBox1.Width; i++)
            {
                for (int j = 0; j < pictureBox1.Height; j++)
                {

                    color = bm.GetPixel(i, j);
                    R = Convert.ToDouble(color.R);
                    G = Convert.ToDouble(color.G);
                    B = Convert.ToDouble(color.B);
                    if (R != 0 && G != 0 && B != 0)
                    {
                        r = R / (R + G + B);
                        g = G / (R + G + B);
                        b = B / (R + G + B);
                        Cb = (-0.169 * r - 0.331 * g + 0.500 * b);
                        Cr = (0.500 * r - 0.418 * g - 0.082 * b);
                        Cb -= CbMean;
                        Cr -= CrMean;
                        double CbDist = (K1 * Cb) + (K3 * Cr);
                        double CrDist = (K2 * Cb) + (K4 * Cr);
                        double CbDist1 = (-0.5 * Cb) + (-0.5 * Cr);
                        double dist = CbDist + CrDist;
                        double dist1 = CrDist1;
                        double gmm = Math.Exp(dist * dist1); //<-------zero
                        int luma = (int)((gmm * 0.3) + (gmm * 0.59) + (gmm * 0.11));
                        bmp.SetPixel(i, j, Color.FromArgb(luma, luma, luma));
                    }
                }
            }