C# I';我正在做边缘检测。但它只适用于一个图像

C# I';我正在做边缘检测。但它只适用于一个图像,c#,image-processing,C#,Image Processing,我正在尝试创建一个简单的边缘检测过滤器。正如我所说,它只适用于一个图像。我尝试用两个步骤创建这个过滤器 模糊图像(带均值过滤器) 计算(原始图像模糊图像) 第一步很有效。第二个的代码和第一个一样简单。但我看到一条错误消息: System.ArgumentOutOfRangeException:'参数必须为正且

我正在尝试创建一个简单的边缘检测过滤器。正如我所说,它只适用于一个图像。我尝试用两个步骤创建这个过滤器

  • 模糊图像(带均值过滤器)
  • 计算(原始图像模糊图像)
  • 第一步很有效。第二个的代码和第一个一样简单。但我看到一条错误消息:

    System.ArgumentOutOfRangeException:'参数必须为正且<高度。 参数名称:y'

    工作图像:

    我的代码:

        public void edgedetectionfilter( )
        {
                Bitmap InputPicture,BlurredPicture, OutputPicture;
                InputPicture = new Bitmap(pBox_SOURCE.Image);
                BlurredPicture = new Bitmap(pBox_PROCESSED.Image);
                int PicWidth = InputPicture.Width;
                int PicHeight= InputPicture.Height;
                OutputPicture = new Bitmap(PicWidth, PicHeight);
                OutputPicture = InputPicture;
    
                int x, y, difR, difG, difB;
    
                Color OrgPicColoValue,BluredPicColorValue;
    
                for (x = 0; x < PicWidth; x++)
                {
                    for (y = 0; y < PicWidth; y++)
                    {
                        BluredPicColorValue = BlurredPicture.GetPixel(x, y);
                        OrgPicColoValue = InputPicture.GetPixel(x, y); //ERROR LINE
                        difR = Convert.ToInt16(OrgPicColoValue.R -BluredPicColorValue.R);
                        difG = Convert.ToInt16(OrgPicColoValue.G- BluredPicColorValue.G );
                        difB = Convert.ToInt16(OrgPicColoValue.B- BluredPicColorValue.B);
    
                        if (difR > 255) difR = 255;
                        if (difG > 255) difG = 255;
                        if (difB > 255) difB = 255;
                        if (difR < 0) difR = 0;
                        if (difG < 0) difG = 0;
                        if (difB < 0) difB = 0;
    
                        OutputPicture.SetPixel(x, y, Color.FromArgb(difR, difG, difB));
                    }
                }
    
                pBoxMedian.Image = OutputPicture;
        }
    
    
    
    
    
    public void meanfilter(int p)
     //KERNELSIZE=P
            {
    
                if (sliderKernel.Value % 2 == 0)
                {
                    MessageBox.Show("Enter an odd number");
                    return;
                }
    
                Color ColorValue;
                Bitmap InputPicture, OutputPicture;
                InputPicture = new Bitmap(pBox_SOURCE.Image);
                int PicWidth = InputPicture.Width;
                int PicHeight= InputPicture.Height;
                OutputPicture = new Bitmap(PicWidth, PicHeight);
                OutputPicture = InputPicture;
    
    
                int x, y, i, j, sumR, sumG, sumB, avgR, avgG, avgB;
    
    
    
    
                for (x = (KernelSize - 1) / 2; x < PicWidth - (KernelSize - 1) / 2; x++)
                {
    
    
                    for (y = (KernelSize - 1) / 2; y < PicHeight - (KernelSize- 1) / 2; y++)
                    {
    
    
                        toplamR = 0;
                        toplamG = 0;
                        toplamB = 0;
                        for (i = -((KernelSize - 1) / 2); i <= (KernelSize - 1) / 2; i++)
                        {
                            for (j = -((KernelSize - 1) / 2); j <= (KernelSize - 1) / 2; j++)
                            {
                                ColorValue= InputPicture.GetPixel(x + i, y + j);
                                sumR = sumR + ColorValue.R;
                                sumG = sumG + ColorValue.G;
                                sumB = sumB + ColorValue.B;
                            }
                        }
                        avgR = sumR / (KernelSize  * KernelSize );
                        avgG = sumG / (KernelSize *KernelSize );
                        avgB = sumB / (KernelSize  * KernelSize );
                        OutputPicture.SetPixel(x, y, Color.FromArgb(avgR, avgG, avgB));
    
    
                    }
                }
    
    
                pBox_PROCESSED.Image = OutputPicture;
    
    
            }
    
    
    public void edgedetectionfilter()
    {
    位图输入图片、模糊图片、输出图片;
    InputPicture=新位图(pBox\u SOURCE.Image);
    BlurredPicture=新位图(pBox\u处理过的图像);
    int PicWidth=InputPicture.Width;
    int PicHeight=InputPicture.Height;
    OutputPicture=新位图(PicWidth、PicHeight);
    OutputPicture=输入图片;
    int x,y,difR,difG,difB;
    颜色或PiccolorValue,模糊PiccolorValue;
    对于(x=0;x255)difR=255;
    如果(difG>255)difG=255;
    如果(difB>255)difB=255;
    如果(difR<0)difR=0;
    如果(difG<0)difG=0;
    如果(difB<0)difB=0;
    OutputPicture.SetPixel(x,y,Color.FromArgb(difR,difG,difB));
    }
    }
    pBoxMedian.Image=OutputPicture;
    }
    公共过滤器(INTP)
    //内核大小=P
    {
    if(sliderKernel.Value%2==0)
    {
    MessageBox.Show(“输入奇数”);
    返回;
    }
    颜色值;
    位图输入图片,输出图片;
    InputPicture=新位图(pBox\u SOURCE.Image);
    int PicWidth=InputPicture.Width;
    int PicHeight=InputPicture.Height;
    OutputPicture=新位图(PicWidth、PicHeight);
    OutputPicture=输入图片;
    int x、y、i、j、sumR、sumG、sumB、avgR、avgG、avgB;
    对于(x=(KernelSize-1)/2;x对于(i=-((内核大小-1)/2);我你比较
    y
    ,而你可能想要
    y
    。它在正方形上工作的图像是偶然的吗?

    错误消息说的比你发布的要多;你的代码取决于
    pBox\u处理的
    pBox\u源代码
    ,但这些都没有给出。可能是错误发生在你的耳朵里请仔细阅读你的代码。如果你想得到有用的答案,这一点很重要。谢谢,我没有给出它们,因为它们是picturebox。需要它们的哪些属性?